tomcat - 具有 secret 传输保证的 URL 仍然可以使用 HTTP 访问

标签 tomcat jakarta-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/。据我了解,对于传输保证为 secret 的 URL 使用 HTTP 的请求应该使用 HTTPS 自动重定向到相同的 URL。

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

提前致谢。

最佳答案

回答我自己的问题。

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

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

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

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

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

关于tomcat - 具有 secret 传输保证的 URL 仍然可以使用 HTTP 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932430/

相关文章:

windows - Tomcat 上的 Web 应用程序没有响应

macos - Mac 10.6 server/tomcat/jenkins/vncserver 无法在目录下运行

java - Maven传递依赖问题

wcf - IIS 仅通过 HTTPS 休息

java.util.date 的值自己改变了

apache - 如何将用户名和密码添加到 Apache tomcat?

java - Embedded Jetty - 一般 SSLEngine 问题 - SSLv2Hello disabled 错误

python - 使用具有自签名证书的 django-sslserver 在本地主机上进行的 django facebook 应用程序测试被拒绝

jakarta-ee - NetBean 项目构建期间缺少 j2ee.server.home

Java 企业架构引用