我有一个配置为请求SSL客户端证书的Web服务器。 如果客户有一个接受的证书,他们将看到的实际内容,但如果不这样做,我退回到没有SSL客户端身份验证和表明通知他们到他们的安全令牌,然后再试一次一个错误页面。
问题是,即使他们他们的道理,因为它认为,本届会议是好的浏览器不会重新协商一个新的SSL会话。 所以,我需要一种方法来废止目前的SSL会话。
我试图做到这一点的服务器,这是一个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。
所以,我能做些什么吗? 我可以修复这些解决方案,或有任何其他的吗?