我做了以下步骤: 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。我错过了什么?
提前致谢。
回答我自己的问题。
我发现这种行为是由HTTP连接器的secure
标志引起的。我之前为测试目的设置了它,并且忘了它。
当HTTP连接器具有secure="true"
且浏览器中没有现有的JSESSIONID cookie时:
当HTTP连接器有secure="false"
时:
实际上这种配置效果很好。使用这些设置,您可以获得302 REDIRECT到https端口。在正常情况下,它透明地发生(例如在浏览器,邮递员),这就是为什么它的工作原理。如果你真的需要确保它是否按预期工作,你可以使用CURL与详细输出
curl -v http://localhost:80/your_resources/
然后你会看到每个步骤和重定向命令
https://localhost:443/your_resources/