【问题标题】:Unexpected results when attempting to access Tomcat 6 HTTPS connector using HTTP尝试使用 HTTP 访问 Tomcat 6 HTTPS 连接器时出现意外结果
【发布时间】:2011-08-23 17:16:21
【问题描述】:

我在这篇文章之后配置了一个 Tomcat 实例:http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html。我注释掉了 HTTP 连接器,因为我希望我的演示应用程序只能通过 HTTPS 访问。我这样配置了 HTTPS 连接器:

   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" keystorePass="nopass"
           keystoreFile="/home/someuser/.keystore" keyAlias="tomcat" />

当我使用 HTTPS 访问演示应用程序的 servlet 的 URL 时,一切正常。

当我尝试使用 HTTP URL 访问它时,我预计它会返回 403 或类似错误。相反,我下载了一些小的(11 字节?)二进制文件,其名称与 servlet 的名称匹配。

有没有人遇到过类似的问题?你是怎么解决的?我应该检查什么以确保我做的一切都正确?

编辑:我尝试使用 curl 而不是浏览器点击相同的连接器,并注意到它没有返回任何标题。哦,响应的大小是 7 个字节,而不是 11 个。

编辑 2:这是我的演示应用程序的 web.xml 中与安全相关的部分:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure Servlet</web-resource-name>
        <url-pattern>/SecureServlet</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    <auth-constraint>
        <role-name>connect</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <description>The role required to connect to the application
    </description>
    <role-name>connect</role-name>
</security-role>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

【问题讨论】:

  • 我昨天在superuser问了同样的问题。

标签: tomcat https tomcat6


【解决方案1】:

我已经通过注释掉 server.xml 中的 HTTP 连接器来测试这一点,强制应用程序在 HTTPS 上工作

https://localhost:8443/testapp

按预期工作

http://localhost:8080/testapp

返回404

http://localhost:8443/testapp

注意不正确 协议的组合 和端口 返回一小段垃圾,在 IE 中呈现,在 Firefox 中以二进制形式呈现

这是 7 个字节

您能否重新检查一下您是否看到了 第三种情况,这在自然情况下不应该发生,但只有在有人摆弄 URL 时才会发生?

好的,我使用CONFIDENTIAL 进行了测试,但它仍然没有将 8443 上的 http 重定向到 https。我猜只有当用户在有效的 8080 端口上尝试 http 时才会出现这种情况。

使用 Fiddler,我看到返回的标头不存在并且是垃圾响应。

HTTP/1.1 200 这个有问题的服务器没有返回标头

这似乎是标准行为,以这种方式访问​​应用程序的最终用户会看到预期的垃圾。

如果你真的需要,你 could try writing 你自己的 custom Tomcat Valve 就像一个过滤器来处理这种特殊情况并将用户重定向到 SSL

【讨论】:

  • 第三种情况正是我所看到的:没有标头和 7 字节的二进制数据。我可以看到,按照我所做的或多或少相同的步骤,您几乎得到了相同的结果。我只是想知道这是否是正确的行为。我希望 Tomcat 要么拒绝连接,要么返回 40x 代码,当然不会发送一些二进制数据。并感谢有关 IE 的提示!在任何给定的 PC 上,我通常使用它一次来下载一个好的浏览器。
  • 您的请求实际上是通过 https 服务所有流量吗?您甚至可以使用 &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt; 将 http 强制到 https
  • 我通过添加应用程序 web.xml 的相关部分来编辑问题。我已经指定了保密运输保证。我想知道是否需要在 web.xml 中配置任何错误页面。
  • JoseK,协议 (http) 和端口 (8443) 的错误混合后是否显示结果不安全?在对我在 tomcat 上的应用程序进行安全审计后,这对我来说是一个安全问题。无论我尝试什么,它都会在 IE 中显示五个小矩形。请建议。谢谢。
  • @waprau:我不明白这是一个安全风险。这是在错误的 https 端口上使用 http 的任何应用程序的浏览器默认行为。因此,这不仅适用于您的应用。
猜你喜欢
  • 2018-02-25
  • 1970-01-01
  • 2013-09-24
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
相关资源
最近更新 更多