Ale*_*lex 12 java security tomcat servlet-3.0 jboss6.x
我们将应用程序从JBoss 5迁移到JBoss6,其中一个主要原因是利用了servlet 3.0的新功能.除了JBoss 6和servlet 3.0的一个新功能之外,一切正常:将会话cookie设置为仅通过安全通道传输,即使请求是通过纯HTTP进行的.这对我们来说是一个非常重要的安全功能,可以通过添加来实现
<secure>true</secure>
Run Code Online (Sandbox Code Playgroud)
在web.xml中.这是我们web.xml的一部分:
<session-config>
<session-timeout>25</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
Run Code Online (Sandbox Code Playgroud)
当我们删除
<secure>true</secure>
Run Code Online (Sandbox Code Playgroud)
一切正常.当它存在时,即使在安全页面(HTTPS)或不安全页面(HTTP)上,也会为每个请求生成新的jsessionid.此外,登录无效,因为在使用安全凭据登录后,用户将被重定向回登录页面.
我想这可能也是Tomcat 7的一个问题,因为它也使用了servlet 3.0规范.任何建议将不胜感激.
问候
根据HTTP 规范:
安全的
选修的。Secure 属性(无值)指示用户代理在发回此 cookie 时仅使用(未指定的)安全方式来联系源服务器。
用户代理(可能在用户的控制下)可以确定它认为适合“安全”cookie 的安全级别。Secure 属性应被视为从服务器到用户代理的安全建议,表明保护 cookie 内容符合会话的利益。
这意味着规范将其开放给浏览器(用户代理)来定义什么是“安全”。
Secure中的元素是HTTP Cookie 安全属性web.xml的引用,您可以使用浏览器的调试工具跟踪该值。
如果通信不“安全”,浏览器将不会在以下请求中将收到的 cookie 发送到服务器。
问题不在于 JBoss 总是返回新的 cookie,而在于浏览器由于通信不安全而没有发回新的 cookie。然后,JBoss 为每个请求创建一个新会话。
很明显,对于非加密通信(不是 HTTPS),浏览器不会发送 cookie,这是预期的,因为您将 cookie 标记为secure = true.
但是,即使您使用HTTPS,“安全”也是相对于浏览器的安全概念而言的,例如:
使用 TLS 可能会出现这些和其他安全问题,这意味着通信不安全。
问题一定出在您的 SSL/TLS 或 Cookie 配置上,这意味着您必须检查您所做的操作并隔离问题。我认为 JBoss 或 JBossWeb(Tomcat 6 分支)中没有任何错误导致它,并且可以肯定它不是规范错误。
我能够使用 TLS 和您的web.xml配置来配置 JBoss 6.1.0 Final,一切都按预期进行。
我建议您仔细检查您的配置、浏览器调试和警报。