【问题标题】:HTTP to HTTPS redirection issue with Tomcat 8Tomcat 8 的 HTTP 到 HTTPS 重定向问题
【发布时间】:2016-03-04 14:23:42
【问题描述】:

我正在尝试在 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>

服务器.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.|#]

我已将“-Djava.net.debug=all”传递给 java,但除了上述错误之外,没有给出任何其他信息。 从上面的错误很清楚为什么没有解析标题。有没有办法获得更深层次的调试输出来帮助解决问题?

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

【问题讨论】:

  • 您确定您的请求实际上是有效的 http 请求吗?也许您的 HTTP-Header 太大(cookie 太多)?如果在端口 50921 上禁用 ssl 怎么办,你还会收到错误吗?
  • 是的,我可以使用hostname:50915/webapp访问
  • hostname:50921/webapp 是怎么回事你也可以访问它吗?
  • 是的,我也可以访问hostname/webapp
  • 你的意思是hostname:50921/webapp

标签: java tomcat ssl


【解决方案1】:

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

重定向有效。 50915 是这个 Tomcat 上的 HTTP 端口和 50921 HTTPS。当您浏览 http://host:50915/xyz 其中 xyz 与安全约束匹配时(这里任何 xyz 都应该),Tomcat 返回一个重定向,告诉您的浏览器/等使用 https://host:50921/xyz 代替,它会自动这样做;你实际上并没有看到任何不同。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 2015-04-05
  • 1970-01-01
  • 2017-02-27
  • 2012-04-13
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多