【问题标题】:Clear SSL client certificate state from JavaScript从 JavaScript 清除 SSL 客户端证书状态
【发布时间】:2012-04-01 05:48:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: caching ssl certificate client-certificates


    【解决方案1】:

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

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

    【讨论】:

    • 似乎需要一段时间才能解决...在 chrome 中使用加密它给了我这个:TypeError: Object # has no method 'logout.根据开发人员的说法,他们只会在 DOMCrypto 成熟后实施,如果实施得很少,就不会实施加密。 mail-archive.com/webkit-dev@lists.webkit.org/msg16213.html 重要部分:“我想重申一下,在规范和标准流程更加成熟之前,我们无意默认启用此功能。使用此 API 进行试验对 WebKit 的其他消费者的影响应该很小。”
    • 正如@RuhollahDelpak 所指出的,这不再适用于最近的版本。
    【解决方案2】:

    对于 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();
    

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

    【讨论】:

    • 如何在apache或nginx中配置这样的url?
    • 这可能吗? SSL 协商发生在 URL 传输之前,AFAIK。
    • @DavidBalažic: The Apache documentation for SSLVerifyClient 说它可以在目录或 .htaccess 级别使用,因此它必须能够在协商后进行 - 我想协商发生了,连接建立后,Apache 做了更多的工作,然后可以拒绝证书,但我对 HTTPS 的底层机制知之甚少,无法确定或知道它是如何发生的。我在发布时确实验证了我的答案有效(我认为是使用 Apache)。
    • @NickRetallack:我相信我是在 Apache 中使用 SSLVerifyClient requireSSLVerifyDepth 0 完成的,因此(几乎)任何证书都将无法通过验证(我想,从技术上讲,有人可以出示根证书Apache 已知,这可能会验证...)。
    • 嗯。不过,我使用的是 nginx,它只允许在虚拟主机级别上进行这些设置。也许我应该让它代理 apache 一个 url 只是为了让你退出?
    【解决方案3】:

    在 IE6+ 中:

    document.execCommand('ClearAuthenticationCache');
    

    【讨论】:

    • 这不起作用,如果用户没有选择证书。他必须重新启动浏览器。除非我不知道任何其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2010-10-16
    • 2017-04-28
    • 2012-02-15
    • 2017-06-01
    • 2012-10-18
    • 2012-07-19
    • 2013-10-01
    相关资源
    最近更新 更多