具有CONFIDENTIAL传输保证的URL仍可使用HTTP访问

问题描述 投票:2回答:2

我做了以下步骤: 1)通过keytool创建自签名证书 2)在server.xml中的8443端口上配置了一个连接器 3)检查localhost:8080和localhost:8433是否可访问 4)在我的web.xml中添加了以下安全性约束

<security-constraint>
   <web-resource-collection>
        <web-resource-name>securedapp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

当我去http://localhost:8080/MyApp/时,没有重定向到https://localhost:8443/MyApp/。据我所知,对于传输保证为机密的URL使用HTTP的请求应使用HTTPS自动重定向到同一URL。

但是,我的应用程序仍然可访问,并且可以使用HTTP和HTTPS。我正在使用Tomcat 6.0.36。我错过了什么?

提前致谢。

tomcat java-ee https web.xml
2个回答
2
投票

回答我自己的问题。

我发现这种行为是由HTTP连接器的secure标志引起的。我之前为测试目的设置了它,并且忘了它。

当HTTP连接器具有secure="true"且浏览器中没有现有的JSESSIONID cookie时:

  • 对于HTTP请求,JSESSIONID存储在URL中
  • 对于HTTPS请求,JSESSIONID存储在cookie中
  • CONFIDENTIAL传输保证不会导致使用HTTPS重定向到同一URL

当HTTP连接器有secure="false"时:

  • 正如所料,使用HTTP对传输保证为机密的URL的请求会自动使用HTTPS重定向到同一URL

1
投票

实际上这种配置效果很好。使用这些设置,您可以获得302 REDIRECT到https端口。在正常情况下,它透明地发生(例如在浏览器,邮递员),这就是为什么它的工作原理。如果你真的需要确保它是否按预期工作,你可以使用CURL与详细输出

curl -v http://localhost:80/your_resources/

然后你会看到每个步骤和重定向命令

https://localhost:443/your_resources/
© www.soinside.com 2019 - 2024. All rights reserved.