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

标签 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 而不是浏览器访问相同的连接器,并注意到它没有返回任何 header 。哦,响应的大小是 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>

最佳答案

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

https://localhost:8443/testapp

按预期工作

http://localhost:8080/testapp

返回 404

http://localhost:8443/testapp

注意不正确 协议(protocol)的混合 和端口 返回一个小的垃圾流,它在 IE 中呈现,在 Firefox 中以二进制形式呈现

这是7个字节

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

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

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

HTTP/1.1 200 This buggy server did not return headers

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

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

关于tomcat - 尝试使用 HTTP 访问 Tomcat 6 HTTPS 连接器时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164944/

相关文章:

java - 没有任何配置的tomcat 7部署速度慢

客户端的 ssl 版本和密码套件

ssl - 不能信任 ubuntu 18.04.2 LTS 中的开发 https 自签名证书

java - 在 XmlRpc 服务中获取 cookie

java - Eclipse IDE 内部和外部 Tomcat 调用上下文的差异

eclipse - 我可以在定义(tomcat)服务器时在 eclipse 中引用环境变量吗?

tomcat - 在 Tomcat 7.0 中设置 Web 应用程序的上下文路径

amazon-ec2 - CloudFront 与一个 EC2 源之间的连接如何使用 HTTPS 进行?

eclipse - 带有eclipse、tomcat6、axis2问题的Web服务

tomcat - 在 catalina.bat 文件中增加堆大小的最佳方法