【问题标题】:Does Jetty support SessionTrackingMode.SSLJetty 是否支持 SessionTrackingMode.SSL
【发布时间】:2014-11-26 17:03:31
【问题描述】:

SessionTrackingMode 允许您指定 Servlet 会话绑定到 SSL 会话。 Tomcat 支持这个Tomcat SSL HOW-TO。在 Jetty 中是否有任何机制可以实现这一点?

例如,如果我在我的 Servlet init 中执行以下操作;

@WebServlet(urlPatterns ={ "/session_test" })

公共类 SessionTestServlet 扩展 HttpServlet {

private static final SessionTrackingMode[] modeArray = { SessionTrackingMode.SSL };
private static final Set<SessionTrackingMode> SESSION_TRACKING_MODES = new HashSet<>(Arrays.asList(modeArray));

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    config.getServletContext().setSessionTrackingModes(SESSION_TRACKING_MODES);
}

那么不会创建会话。

【问题讨论】:

    标签: servlets ssl jetty


    【解决方案1】:

    Jetty 中似乎不支持 SessionTrackingMode.SSL

    刚刚打开了关于它的错误(因为您是官方第一个询问 servlet 规范的这个功能的人)

    https://github.com/eclipse/jetty.project/issues/161

    很想知道这在未来将如何工作,对于 HTTP/2,您不会为每个后续请求建立新的 SSL 连接,它们只会在同一个 ALPN 层内通过隧道传输。

    更新:2014 年 10 月 2 日

    为了解决会话 ID 劫持,有一个功能 implemented in Jetty 9 将在身份验证后更改会话 ID。 Bug-392247

    这在防止恶意第三方劫持经过身份验证的会话方面做得很好。 (从您的登录前开始使用 SSL)

    现在,一些背景知识,在 Jetty 9(又名 Servlet 3.1)之前的 Jetty 版本中,我们将创建一个新的会话对象并复制旧的会话数据。这意味着我们还将触发此更改的注册会话侦听器。

    Jetty 9 不再如此,因为新的 Servlet 3.1 引入了一个新方法 HttpServletRequest.changeSessionId(),用户也可以调用它来强制更改 sessionId,还有 HttpServletRequest.login(),用户可以通过编程方式调用它登录。这还伴随着一个要求,即如果在这两个调用之前存在会话(之前的会话对象 == 之后的会话对象),则没有要触发的侦听器。这意味着我们只更改 sessionId 而不是对象。

    这对于 Session ID Hijacking 意味着什么,其实没什么,但是知道这些方法的存在以及使用它们代表什么很有用。 :)

    【讨论】:

    • 谢谢,我只是在探索防止 Session Id 劫持的机制。我还在测试针对服务器端会话存储 javax.servlet.request.ssl_session_id 并检查它是否符合预期。是的,SSL 会话与应用程序会话范围是一个棘手的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多