我有一个使用ssl证书身份验证的网站。 如何从服务器强制Web浏览器再次询问要使用的证书? 它可以用于注销,但这里的用例是切换用户身份。
我记得有些事情是将用户定向到一个页面,该页面的ssl设置与当前的身份验证证书不兼容,但无法找到正确的设置。
我的设置使用apache mod-ssl,但也欢迎使用IIS解决方案。
更新: 我特别询问服务器端:如何在需要客户端证书但拒绝所有证书的同一主机名上设置URL。
对于Firefox,javascript:window.crypto.logout();
确实可以解决用户的轻微不便(我认为可以编写脚本)。
答案 0 :(得分:6)
这一般来说相当困难(当然,对于大多数用户来说,客户证书使用可能会很乏味的原因之一。)
从客户端来看,有一些JavaScript技术,但它们并不全面支持(参见this question)。
使用Apache Tomcat 7,您可以使用请求属性使SSL / TLS会话无效,如this question中所述。
我不知道有任何钩子可以让你用Apache Httpd(和mod_ssl
)做到这一点。 Apache Httpd背后可用的机制(例如mod_php
,CGI,FCGI ......)通常无法改变由mod_ssl
设置的任何设置或环境变量,这对于使会话无效。
在IIS上,this question仍未得到答复。
从浏览器的角度来看,一般的方法是进入其设置并清除SSL状态(这取决于浏览器,但通常至少需要几个对话框,而不仅仅是一个快捷按钮,至少没有插件)。
答案 1 :(得分:1)
从客户端Web浏览器,您可以为MSIE(Internet Explorer)执行此操作: 通过转到工具>互联网选项>内容(标签)>清除SSL状态,您的清除SSL状态。
在firefox(版本20之前)中,您可以执行以下操作: 工具|开始私密浏览。
然后访问相关页面。或者然后做"工具|停止私密浏览"然后......
然后,当您重新加载页面时,它将提示您提供新的客户端证书(如果您的服务器信任的CA中有多个证书)。如果您只有一个证书,那么它将使用您商店中唯一的一个PKI客户端证书。
答案 2 :(得分:0)
要退出,请阅读以下帖子:https://security.stackexchange.com/questions/36853/is-it-possible-to-force-a-new-ssl-session#
在客户端,SSL会话通常保存在RAM中。例如,Internet Explorer内部由几个相互通信的进程组成,你必须全部杀掉它们以使它忘记一个SSL会话(实际上,只有当你关闭了所有IE窗口时才会发生这种情况)。 p>
替代方案可以是使用javascript关闭浏览器。