【问题标题】:How to clear SSL state in browser when user's session expires?用户会话过期时如何清除浏览器中的 SSL 状态?
【发布时间】:2009-03-17 05:28:16
【问题描述】:

我正在开发一个 ASP.NET 应用程序,我们的用户使用客户端证书通过 HTTPS 进行身份验证。我们的用户只使用 IE7。

一旦使用客户端证书成功进行身份验证,它就会保留在浏览器的 SSL 缓存中,直到进程关闭或用户手动清除 SSL 缓存。我们希望能够在用户注销或会话到期时清除 SSL 缓存,以提高系统的安全性。

我们的客户已经使用智能卡来访问系统,当卡从客户端计算机中移除时,系统会自动卸载证书,但这根本不会清除浏览器缓存,从而留下了来自其他有权访问的用户的潜在攻击途径与真正的用户在同一台​​机器上。

我发现了如何从 JavaScript 中进行实际的缓存清除:

document.execCommand("ClearAuthenticationCache");

当用户显式退出时,这非常有效,因为我们可以在允许用户再次登录之前在客户端上执行脚本。

注意:IE7 仅允许在 Web 服务器上禁用 HTTP Keep-Alives 时以编程方式清除缓存。

这是一个棘手的问题 - 如果客户端的会话过期,在用户尝试再次登录之前,我不知道有什么方法可以在浏览器中处理这个问题。当他们到达登录页面时我无法清除状态,因为我需要在页面在服务器上执行之前清除状态并选择新证书。

有什么想法吗?抱歉问题太长了,但背景对这个问题很重要。

【问题讨论】:

    标签: asp.net ssl certificate


    【解决方案1】:

    没关系,我想出了一个很好的解决方案:

    • 当用户成功登录后,我们会创建一个额外的会话 cookie,在关闭浏览器之前不会过期。

    • 1234563将它们注销,就像我们对用户启动的注销所做的那样。如果会话 cookie 不存在,那么我们会尝试使用他们的证书自动登录用户。
    • 每次显式退出时都会删除自定义会话 cookie,并在每次成功登录时重新填充。

    这为我们提供了最佳的用户体验,并保证只有在会话仍然有效(15 分钟,滑动)时才会缓存证书。此外,用户无法删除会话 cookie,因此无法绕过此行为。他们也不能在不接受会话 cookie 的情况下使用该网站。

    【讨论】:

    • 你如何明确地“注销”?如果这是客户端对“ClearAuthenticationCache”的 JS 调用,PowerUser 可以绕过该调用(破解客户端代码)。
    • 对 Laurent 的问题提出质疑
    • 我们在服务器上注销它们,只是普通的 FormsAuthentication.SignOut() 方法 - 没有客户端交互。
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多