10

我在 SSL 会话中使用客户端证书对用户进行身份验证,但是缓存会话有点问题。(我已将 IIS 配置为接受(不需要)客户端证书。)

正常情况:
用户访问请求证书的页面。浏览器启动证书选择器,用户选择所需的证书(并在需要时输入 PIN),然后一切都按预期进行。

事情没有按预期工作的情况:
用户访问请求证书的页面。浏览器启动证书选择器,用户选择所需的证书,但随后在 PIN 对话框中取消。由于未发送证书,用户被重定向到上一页。用户尝试再次登录,但尝试自动失败,因为最后一个 SSL 会话已被缓存。

我使用 IE 在 IE 中解决了这个问题document.execCommand("ClearAuthenticationCache");,但它仍然无法在 FF 或 Chrome 中工作,因为它们不支持该方法。有没有办法解决这个问题?

4

3 回答 3

6

您可能对此讨论这个 Chromium 问题感兴趣。特别是,您应该尝试:

if (window.crypto) window.crypto.logout();
于 2012-03-15T17:07:33.810 回答
4

对于 Chrome(至少在 19.0.1084.30 测试版中),似乎如果您可以在需要客户端证书但拒绝所有证书的相同主机名上设置 URL,那么向该 URL 发出请求将具有与window.crypto.logout(). 例如,如果/ssl_logout/是特殊配置的 URL:

var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
    // put any actions to carry out upon logout here
};
xmlHttp.open( "GET", "/ssl_logout/", true );
xmlHttp.send();

(也可以使用包含iframeorimg的页面src="/ssl_logout/"。)

于 2012-04-23T02:07:37.587 回答
1

在 IE6+ 中:

document.execCommand('ClearAuthenticationCache');
于 2013-05-09T10:14:46.107 回答