【问题标题】:Cookie issue when switching between HTTP and HTTPS on Tomcat在 Tomcat 上切换 HTTP 和 HTTPS 时出现 Cookie 问题
【发布时间】:2019-01-14 18:10:17
【问题描述】:

我正在研究一个网站同时存在于 HTTP 和 HTTPS 上的场景。

当用户登录到 HTTPS 站点时,JSESSIONID 的“安全”cookie 会存储在浏览器中。如果用户关闭浏览器并返回 - 这次希望使用 HTTP 登录 - 用户无法登录,因为浏览器不会在浏览器中存储新的“不安全”JSESSIONID,也不会发送先前存储的安全cookie 到服务器。

我的问题是:

  1. 有没有一种方法,当用户使用 HTTP 登录时,服务器可以发送新的“不安全”cookie,从而将现有的“安全”cookie 转换为具有新值的“不安全”cookie?

  2. 有没有办法让 Tomcat 在安全和不安全连接中为 JSESSIONID 使用不同的 cookie 名称?

我试图在互联网上查找 - 但似乎没有办法做到这一点。在这种情况下,最终用户可能会认为该站点无法正常工作。

注意: 是的,我们可以强制用户始终使用 HTTPS。事实上,这正是我们正在努力做的。但是,我们在 Web 应用程序中有一个选项可以禁用 HTTPS。所以,这就是正在发生的事情——用户认为“这个应用程序强迫我使用 HTTPS,我不想使用它。让我禁用它”。要禁用 HTTPS,用户以 HTTPS 版本登录站点,禁用 HTTPS 端口 - 这会触发服务器重新启动。用户现在访问 HTTP 站点 - 但她无法登录,因为用户从未退出 HTTPS 会话 - 并且这些 cookie 仍然存在。这被视为可用性问题,我正在尝试解决此问题。

【问题讨论】:

    标签: tomcat cookies session-cookies


    【解决方案1】:

    Tomcat 将允许在没有安全通道的情况下进行身份验证。

    只有在请求通过“安全”通道或WEB-INF/web.xml 中的<cookie-config> 指示容器使用安全 cookie 时,Tomcat 才会创建设置了“安全”标志的 cookie。

    您必须以某种方式配置 Tomcat 或您的应用程序以导致非安全登录失败。

    服务器无法在客户端上重写 cookie 以将“安全”cookie 更改为“非安全”cookie。对于相同主机名和路径的具有相同名称(例如JSESSIONID)的 Cookie 将根据 cookie 处理规则进行处理。我建议阅读RFC 6265 了解更多信息。

    【讨论】:

    • 谢谢 - 经过大量试验和错误后,我意识到无法从不安全的 HTTP 连接中覆盖/删除安全 cookie。
    【解决方案2】:

    我最终为 HTTP 和 HTTPS 站点创建了单独的 cookie 名称。

    由于我们的应用程序已打包并提供给客户,因此他们可以选择关闭 HTTP 或 HTTPS。打开 HTTPS 后,我们会将所有 HTTP 用户重定向到相应的 HTTPS 站点。当客户管理员决定禁用 HTTPS 时,问题就出现了,然后,一些一直使用 HTTPS 并且没有明确退出系统的用户,他们被浏览器缓存中的安全 cookie 卡住 - 并且无法从 HTTP 站点登录系统。解决方法当然是清除浏览器缓存 - 但为了避免支持调用,我们试图找到对用户透明的东西。

    当站点启用 HTTPS 时,我们可以使用设置 Tomcat 会话 cookie 名称为 JSESSIONID_HTTPS。这在某种程度上是我必须做的事情的要点:

    ServletContext sc = ....
    SessionCookieConfig cookieConfig = sc.getSessionCookieConfig();
    
    if (isHttpsEnabled) {
       cookieConfig.setName("JSESSIONID_HTTPS");
    } else {
       cookieConfig.setName("JSESSIONID_HTTP");
    }
    

    【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2014-01-30
    • 1970-01-01
    • 2016-06-06
    • 2012-12-28
    • 2012-04-19
    • 2014-06-08
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多