从JavaScript清除SSL客户端证书状态

时间:2012-03-15 16:57:12

标签: caching ssl certificate client-certificates

我在SSL会话中使用客户端证书来验证用户身份,但我对缓存会话有一些问题。 (我已将IIS配置为接受 - 不是require-client证书。)

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

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

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

3 个答案:

答案 0 :(得分:6)

您可能对this discussionthis Chromium issue感兴趣。特别是,你应该尝试:

if (window.crypto) window.crypto.logout();

答案 1 :(得分:3)

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

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

(使用包含iframeimgsrc="/ssl_logout/"的网页也适用。)

答案 2 :(得分:1)

在IE6 +中:

document.execCommand('ClearAuthenticationCache');