【问题标题】:tomcat with https get a CLOSE_WAIT when directly TCP connect直接TCP连接时,带有https的tomcat会获得CLOSE_WAIT
【发布时间】:2019-11-27 02:19:43
【问题描述】:

我使用 tomcat 8.5.4 在端口 443 上构建一个基于 https 的服务器,如下所示:

 94     <Connector
 95            protocol="org.apache.coyote.http11.Http11NioProtocol"
 96            port="8000" maxThreads="200"
 97            scheme="https" secure="true" SSLEnabled="true"
 98            keystoreFile="conf/rs_keystore.jks" keystorePass="ntsdawn"
 99            clientAuth="false" sslProtocol="TLS"/>

但是有客户端使用tcp连接8000端口,然后快速关闭tcp连接。在此之后,在我的服务器中,连接处于 CLOSE_WAIT 状态,更重要的是,CPU 增长并且使用 gc 触发器非常快地创建了 org.apache.tomcat.util.net.TLSClientHelloExtractor 对象:

root@nts32:/home/vcloud/apache-tomcat-8.5.4/logs# jmap -histo 14 | head

 num     #instances         #bytes  class name
----------------------------------------------
   1:       5159655      165108960  java.util.HashMap$Node
   2:          9138      131509512  [I
   3:       5148446      123562704  java.util.ArrayList
   4:       5145501      123492024  java.util.concurrent.LinkedBlockingQueue$Node
   5:       5145486      123491664  org.apache.tomcat.util.net.**TLSClientHelloExtractor**
   6:       3210008      102720256  java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
   7:       2162508       86500320  java.util.HashMap$KeyIterator

并且连接将永远保持在 CLOSE_WAIT....

但是,如果我修改 server.xml 使用 http 而不是 https:

 70     <Connector port="8000" protocol="org.apache.coyote.http11.Http11NioProtocol"
 71                connectionTimeout="20000"
 72                redirectPort="8443" />

然后一切正常。 TCP 连接来了,当客户端发送 FIN 时,我的服务器会回复 FIN。

我的 https 配置有什么问题吗?

【问题讨论】:

    标签: java sockets tomcat tcp


    【解决方案1】:

    tomcat 8.5.4 中存在一个错误,其中在 TLS 握手完成之前断开套接字连接时,TLS 连接会进入循环。升级到 tomcat 8.5.5 或更高版本 应该可以解决此问题。

    以下是错误

    https://bz.apache.org/bugzilla/show_bug.cgi?id=60035

    【讨论】:

      【解决方案2】:

      HTTPs apache 库也可能存在问题。从 httpcore-osgi-4.4.11 的 apache 发行说明中,我发现在“httpcore-osgi”库中修复了两个可能相关的错误: 错误修复:更正了对由对方端点发起的优雅 SSL 会话终止的处理 (从主人向后移植)。 由 Oleg Kalnichevski 提供

      Bug fix: corrected handling of NEED_WRAP handshake status during graceful SSL session termination
      (back-ported from master).
      Contributed by Oleg Kalnichevski <olegk at apache.org>
      

      参考链接:https://www.apache.org/dist/httpcomponents/httpcore/RELEASE_NOTES-4.4.x.txt

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2012-02-08
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        相关资源
        最近更新 更多