internet-explorer - 如何在网络浏览器上触发 SSL 重新握手?

标签 internet-explorer google-chrome tomcat ssl client-certificates

我有一个配置为请求 SSL 客户端证书的 Web 服务器。如果客户端有一个可接受的证书,他们将看到实际内容,但如果没有,我会在没有客户端身份验证的情况下回退到 SSL,并显示一个错误页面,通知他们连接他们的安全 token 并重试。

问题是,即使他们连接了 token ,浏览器也不会重新协商新的 SSL session ,因为它认为当前 session 正常。所以我需要一种方法来使当前的 SSL session 无效。

我尝试在服务器上执行此操作,它是 Tomcat 6:

response.setHeader("Connection", "close");          // open new socket next time
response.flushBuffer();

Object sslSessionMgr = request.getAttribute("javax.servlet.request.ssl_session_mgr");
if (sslSessionMgr != null) {
    try {
        Method invalidateSession =
                Class.forName("org.apache.tomcat.util.net.SSLSessionManager").getMethod("invalidateSession");
        invalidateSession.setAccessible(true);
        invalidateSession.invoke(sslSessionMgr);
    } catch (Exception e) {/*ignore*/}
}

但事实证明 sslSessionMgr 始终为 null,我想知道我在这里做错了什么。

客户端当然没有通用的解决方案,但幸运的是 window.crypto.logout() 为 FireFox 解决了这个问题。我在某处读到 IE 的等价物是 document.execCommand("ClearAuthenticationCache") 或一些 ActiveX 控件?无论如何,我似乎无法为 IE 或 Chrome 做到这一点。

那我能在这里做什么呢?我可以修复这些解决方案中的任何一个,还是有任何其他解决方案?

最佳答案

不幸的是,正如 this issue 中所讨论的,这在 Chrome 中尚不支持。 .

据我所知,javax.servlet.request.ssl_session_mgr 技巧仅适用于 Apache Tomcat 7。

关于internet-explorer - 如何在网络浏览器上触发 SSL 重新握手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10229027/

相关文章:

html - <table> height 100% inside a <td> 在 IE 中不起作用

javascript - OAuth2 隐式授予(带弹出窗口,无需 LocalStorage)

CSS 过渡在 IE 8/7 中不起作用,在 IE 11-9、FF、Chrome、Safari 中起作用

google-chrome - 下载 session 组件时无法获取正确的参数

web-applications - 有没有一种简单的方法来监视 tomcat Web 应用程序中的 session ?

html - 如何将preserveAspectRatio添加到用作背景图像的svg

c# - 我越来越无法加载资源:net::ERR_BLOCKED_BY_CLIENT 与谷歌浏览器

google-chrome - Chrome 扩展 : Unchecked runtime. lastError:无法解析或设置名为 "ASP.NET_SessionId"的 cookie

java - 找不到 spring 主页

java - 如何设置一个 Servlet 作为 Java 主页运行?