我在本文后面配置了一个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>
答案 0 :(得分:8)
我通过在server.xml
中注释掉HTTP连接器强制应用程序在HTTPS上工作来测试这个
按预期工作
返回 404
请注意 不正确的 混合协议 和端口 < / em>返回一小段垃圾流,它在IE中呈现,在Firefox中呈现为二进制文件
这是7个字节
如果您看到第三种情况,您是否可以重新检查哪种情况不应该在自然情况下发生,但只有当有人在使用该网址时?
好的,我使用CONFIDENTIAL
进行了测试,但仍然没有将8443上的http重定向到https。我猜测只有当用户在有效的8080端口上尝试过http时才会出现。
使用Fiddler,我看到回来的标题不存在,垃圾回复。
HTTP / 1.1 200这个错误的服务器没有返回标题
这似乎是标准行为,以这种方式访问应用程序的最终用户将看到垃圾邮件。
如果你真的需要,你could try writing自己的custom Tomcat Valve就像过滤器一样处理这种特殊情况并将用户重定向到SSL