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

时间:2013-04-10 17:22:51

标签: tomcat java-ee https web.xml

我做了以下步骤:
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。 我错过了什么?

提前致谢。

2 个答案:

答案 0 :(得分:2)

回答我自己的问题。

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

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

  • 用于HTTP请求JSESSIONID存储在URL
  • 对于HTTPS请求,JSESSIONID存储在cookie
  • 机密运输保证不会导致重定向到 使用HTTPS的相同网址

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

  • 正如预期的那样,请求使用HTTP来处理传输保证的URL is CONFIDENTIAL会自动重定向到使用相同的URL HTTPS

答案 1 :(得分:1)

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

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

然后您将看到每个步骤并将命令重定向到

https://localhost:443/your_resources/