3

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

提前致谢。

4

2 回答 2

2

回答我自己的问题。

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

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

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

当 HTTP 连接器具有secure="false"

  • 正如预期的那样,对于传输保证为 CONFIDENTIAL 的 URL 使用 HTTP 的请求会使用 HTTPS 自动重定向到相同的 URL
于 2013-04-11T09:50:52.113 回答
2

实际上,这种配置效果很好。通过这些设置,您可以获得 302 重定向到 https 端口。在正常情况下,它会透明地发生(例如在浏览器、邮递员中),这就是它起作用的原因。如果您真的需要确保它是否按预期工作,您可以使用带有详细输出的 CURL

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

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

https://localhost:443/your_resources/
于 2019-03-28T09:32:41.867 回答