尝试使用HTTP访问Tomcat 6 HTTPS连接器时出现意外结果

时间:2011-08-23 17:16:21

标签: tomcat https tomcat6

我在本文后面配置了一个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>

1 个答案:

答案 0 :(得分:8)

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

  

https://localhost:8443/testapp

按预期工作

  

http://localhost:8080/testapp

返回 404

  

http://localhost:8443/testapp

请注意 不正确的 混合协议 和端口 < / em>返回一小段垃圾流,它在IE中呈现,在Firefox中呈现为二进制文件

这是7个字节

如果您看到第三种情况,您是否可以重新检查哪种情况不应该在自然情况下发生,但只有当有人在使用该网址时?

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

使用Fiddler,我看到回来的标题不存在,垃圾回复。

  

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

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

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