java - 退出 ssl session

标签 java session servlets ssl ssl-certificate

我正在尝试关闭 SSL 连接,以防有人想在使用客户端证书作为身份验证方法的网页上使用另一个证书。 我知道如何结束 session ,坦克。我不知道的是,如何使 SSLSession 无效。 显然有一个,我可以用 request.getAttribute("javax.servlet.request.ssl_session") 得到它的 id 而且显然做 session.invalidate() 还不够,为什么?因为我在 logout.jsp 中有它 重定向到我的 index.jsp。现在如果 SSL 连接已经失效,我应该 在通过我的 logout.jsp 后,要求从我的浏览器证书中选择一个证书,我不是 我仍然登录,我什至在我的注销 jsp 中有一个 request.setHeader("connection", "close"), 也无济于事(我读过标题的内容可能更多地被解释为浏览器的指南 而不必关闭所有连接)。 在 tomcat7 中,有可能使用 SSLSessionManager 使 SSLSession 无效,所以我猜测,tomcat6 也必须有类似的东西。

所以整体的工作流程是

  1. index.jsp 的第一次点击
  2. 我被要求选择一个浏览器证书
  3. 我使用浏览器证书登录
  4. 我点击注销按钮,它向 logout.jsp 发出 ajax 请求
  5. 在 logout.jsp 中,我使正常的 HTTPSession 无效并将连接 header 设置为“关闭”

=> 这里缺少一些使 SSLSession 无效

  1. 如果 logout-ajax 请求成功,我将被带到 index.jsp (现在再次从第 1 点开始) 只是我第二次没有被要求获得证书,这正是我想要实现的......在你问之前:我不想为此切换到 tomcat7 但需要在 tomcat-6.0.32 中完成

非常感谢任何帮助

最佳答案

您必须掌握 Tomcat 用来创建 SSLServerSocketSSLContext。从那里你可以去

byte[] sessionID = (byte[])request.getAttribute("javax.servlet.request.ssl_session"); 
SSLSession session = sslContext.getServerSessionContext().getSession(sessionID);
session.invalidate();

但我不认为这是可行的:至少我不知道您如何从 Tomcat 获取 SSLContext

关于java - 退出 ssl session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30230277/

相关文章:

java - 单击屏幕时更改 TextView 值

java - 我应该使用多线程吗

java - Scala Chart (JFreeChart) 无法在 AWS 服务器上运行

tomcat - java.lang.IllegalArgumentException : Servlet mapping specifies an unknown servlet name 异常

java - 在 JSP 页面加载时与 servlet 进行通信

java - 健全性检查 : how are packages and modules are meant to be used together?

asp.net - 在 ASP.NET-MVC 中的请求之间保留数据的标准方法

java - 在 JSP 中使用隐藏表单持久保存数据

php - 可以在单个 PHP 脚本中使用多个独立的 $_SESSION 吗?

java - web.xml servlet 映射无限循环