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

尝试使用HTTP访问Tomcat 6 HTTPS连接器时出现意外结果,tomcat,https,tomcat6,Tomcat,Https,Tomcat6,我根据本文配置了Tomcat的一个实例:。我注释掉了HTTP连接器,因为我希望我的演示应用程序只能通过HTTPS访问。我将HTTPS连接器配置为: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keys

我根据本文配置了Tomcat的一个实例:。我注释掉了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时,一切都正常

当我尝试使用HTTPURL点击它时,我希望它返回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>

安全Servlet
/SecureServlet
保密的
连接
连接到应用程序所需的角色
连接
基本的

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

工作如期进行

返回一个404

请注意,协议和端口的混合不正确,返回的垃圾流在IE中呈现为二进制,在Firefox中呈现为二进制

这是7个字节

您是否可以重新检查您是否看到了第三种情况,这种情况在自然情况下不应该发生,但只有在有人篡改URL时才会发生

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

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

HTTP/1.1 200此错误服务器未返回头

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


如果你真的需要,你可以选择自己的,就像一个过滤器一样处理这个特殊情况并将用户重定向到SSL

第三种情况正是我所看到的:没有标题和7字节的二进制数据。我可以看出,按照与我大致相同的步骤,您几乎得到了相同的结果。我只是想知道这是不是正确的行为。我希望Tomcat要么拒绝连接,要么返回40x代码,当然不会发送一些二进制数据。谢谢你给我关于IE的提示!在任何一台电脑上,我通常使用它一次来下载一个好的浏览器。你的请求实际上是通过https服务所有流量吗?您甚至可以通过添加我的应用程序的web.xml的相关部分,使用
机密
将http强制转换为https。我已经指定了保密的运输保证。我想知道我是否需要在web.xml.JoseK中配置任何错误页面,在协议(http)和端口(8443)的错误组合不安全后是否显示结果?在tomcat上对我的应用程序进行安全审计后,我发现这是一个安全问题。无论我尝试什么,它都会在IE中显示五个小矩形。请建议。谢谢。@waprau:我不明白这怎么会是安全风险。这是http位于错误https端口上的任何应用程序的浏览器默认行为。所以这不仅仅是针对你的应用。我昨天也问了同样的问题。