Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 从JavaScript中清除SSL客户端证书状态_Caching_Ssl_Certificate_Client Certificates - Fatal编程技术网

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

Caching 从JavaScript中清除SSL客户端证书状态,caching,ssl,certificate,client-certificates,Caching,Ssl,Certificate,Client Certificates,我在SSL会话中使用客户端证书来验证用户,但是缓存会话有点问题。(我已将IIS配置为接受不需要的客户端证书。) 正常情况: 用户访问请求证书的页面。浏览器启动证书选择器,用户选择所需的证书(并在需要时输入PIN),然后一切按其应有的方式进行 事情不按预期运行的情况: 用户访问请求证书的页面。浏览器启动证书选择器,用户选择所需的证书,然后在PIN对话框中取消。由于未发送证书,用户被重定向到上一页。用户尝试再次登录,但由于缓存了最后一个SSL会话,因此尝试自动失败 我在IE中使用document.e

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

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

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

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

您可能对和感兴趣。特别是,您应该尝试:

if (window.crypto) window.crypto.logout();
对于Chrome(至少在19.0.1084.30 beta版中),如果您可以在同一主机名上设置一个URL,该URL需要客户端证书,但拒绝所有证书,那么向该URL发出请求将具有与
window.crypto.logout()相同的效果。例如,如果
/ssl\u 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();
(使用包含
iframe
img
的页面,使用
src=“/ssl\u logout/”
也有效。)

在IE6+:

document.execCommand('ClearAuthenticationCache');

似乎需要一段时间才能解决。。。在chrome中使用crypto,我得到了这样一个信息:TypeError:Object#没有方法“注销”。根据开发人员的说法,他们只会在DOMCrypto成熟后实施,如果实施得很少,就不会实施加密。重要部分:“我想再次重申,在规范和标准流程更加成熟之前,我们无意在默认情况下启用此功能。使用此API进行试验对WebKit的其他消费者影响很小。”正如@RuhollahDelpak所指出的,这不再适用于最新版本。您将如何在apache或nginx中配置这样的url?这可能吗?SSL协商发生在URL传输之前,AFAIK。@DavidBalažic:说它可以在目录或.htaccess级别使用,所以它必须能够在协商后进行协商——我可以想象协商发生了,连接建立了,Apache做了更多的工作,然后可以拒绝证书,但我对HTTPS的基本机制了解不够,无法确定它是如何发生的。我在发帖时确实验证了我的答案是否有效(我想是在Apache上)。@NickRetallack:我相信我在Apache中使用了
SSLVerifyClient require
SSLVerifyDepth 0
,因此(几乎)任何证书都无法通过验证(我想,从技术上讲,有人可以提供Apache已知的根证书,这可能会验证…).Hm.不过我正在使用nginx,它只允许在virtualhost级别上进行这些设置。也许我应该让它代理apache的一个url,以便您注销?如果用户未选择任何证书,则此操作无效。他必须重新启动浏览器。除非我不知道其他解决方案。