Tomcat 8

时间:2016-03-04 14:23:43

标签: java tomcat ssl

我正在尝试在Tomcat 8中设置HTTP到HTTPS重定向。 以下是配置 - 的web.xml

<security-constraint>
    <web-resource-collection>
    <web-resource-name>securedapp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint />
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

server.xml中

<Connector executor="tomcatThreadPool"
           port="50915"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxHttpHeaderSize="99999"
           server=" Web"
           keepAliveTimeout="90000"
           maxKeepAliveRequests="-1"
           acceptorThreadCount="40"
           allowTrace="true"
           redirectPort="50921" />
<Connector executor="tomcatThreadPool"
           port="50921"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxHttpHeaderSize="99999"
           SSLEnabled="true"
           maxThreads="150"
           scheme="https"
           secure="true"
           server="Web"
           keepAliveTimeout="90000"
           maxKeepAliveRequests="-1"
           acceptorThreadCount="40"
           allowTrace="true"
           keystoreFile="/web/home/wb10d1/.keystore"
           keystorePass="changeit"/>

更新#1 我能够通过http和http访问配置的端口没有任何问题:

http://hostname:50915/webapp
https://hostname:50921/webapp

但是当我尝试如下访问时     https://hostname:50915/webapp

我希望Tomcat应该将它从为端口#50915配置的非SSL连接器重定向到为端口#50921配置的SSL连接器,但它似乎不起作用。我看到的唯一错误是下面的错误。

catalina.out中

[#|INFO|2016-03-05 00:14:55.524+1000|1|org.apache.coyote.AbstractProtocol.start|Starting ProtocolHandler ["http-nio-50915"]|#]
[#|INFO|2016-03-05 00:14:55.536+1000|1|org.apache.coyote.AbstractProtocol.start|Starting ProtocolHandler ["http-nio-50921"]|#]
[#|INFO|2016-03-05 00:14:55.541+1000|1|org.apache.catalina.startup.Catalina.start|Server startup in 6831 ms|#]
[#|INFO|2016-03-05 00:15:33.254+1000|120|org.apache.coyote.http11.AbstractHttp11Processor.process|Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.|#]

我已经通过&#34; -Djava.net.debug = all&#34;到java,但这并没有提供任何超过上面的错误。 从上面的错误中可以清楚地看出为什么没有解析头文件。有没有办法获得更深层次的调试输出以帮助确定问题?

我见过其他类似问题,例如thisthis。但是,这些似乎对我没用。

1 个答案:

答案 0 :(得分:1)

(抱歉延迟;最初我错过了链接请求。)

重定向正在运行。 50915是此Tomcat上的HTTP端口和50921 HTTPS。当您浏览http://host:50915/xyz其中xyz与安全约束匹配时(此处任何xyz应该),Tomcat返回一个重定向,告诉您的浏览器/等使用https://host:50921/xyz代替它,它会自动执行;你实际上看不到任何不同的东西。

您无法在HTTPS端口上执行HTTP,反之亦然;这就是为什么HTTP和HTTPS连接器首先有不同的端口。如果您尝试在端口50915上执行HTTPS,则Tomcat将初始SSL握手消息(ClientHello)视为明文HTTP请求,并且(当然)它是完全无效的HTTP请求,因此Error parsing HTTP request header。如果您尝试在50921上执行HTTP,则Java SSL代码会尝试将HTTP请求作为ClientHello处理,该请求根本不起作用,因此它会抛出异常,并在异常消息中实际显示“可能的纯文本”;我不记得(现在不能测试)在Tomcat日志中看起来如何。