我正在开发一个 ASP.NET 应用程序,我们的用户使用客户端证书通过 HTTPS 进行身份验证。我们的用户只使用 IE7。
一旦客户端证书用于成功验证,它就会保留在浏览器的 SSL 缓存中,直到进程关闭或用户手动清除 SSL 缓存。我们希望能够在用户注销或会话到期时清除 SSL 缓存,以提高系统的安全性。
我们的客户已经使用智能卡来访问系统,当智能卡从客户端计算机中移除时,系统会自动卸载证书,但这根本不会清除浏览器缓存,从而为其他有权访问相同的用户留下了潜在的攻击途径机为正版用户。
我发现了如何从 JavaScript 中进行实际的缓存清除:
document.execCommand("ClearAuthenticationCache");
当用户显式注销时,这非常有效,因为我们可以在允许用户再次登录之前在客户端上执行脚本。
注意:IE7 仅允许在 Web 服务器上禁用 HTTP Keep-Alives 时以编程方式清除缓存。
这是棘手的一点 - 如果客户端的会话过期,在用户尝试再次登录之前,我不知道有什么方法可以在浏览器中处理这个问题。当他们到达登录页面时,我无法清除状态,因为我需要在页面在服务器上执行之前清除状态并选择新证书。
有任何想法吗?为问题的长度道歉,但背景对于这个问题很重要。