You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat启动后Confluence TLS握手耗时过长问题求助

解决Confluence Tomcat启动初期TLS握手卡顿问题

嗨,我来帮你捋一捋这个Tomcat刚启动时TLS握手卡几分钟的问题——这种场景我在维护老版本Confluence环境时碰到过好几次,大概率和启动阶段的阻塞式加密操作有关,结合你用的是Ubuntu 16.04+Let's Encrypt证书的环境,给你几个针对性的排查和解决方向:

1. 先排查系统熵池不足的问题

Tomcat生成TLS会话密钥需要足够的系统随机熵,Ubuntu 16.04默认用的/dev/random是阻塞式的,当系统熵值不够时,会直接卡住等待熵生成。

  • 先检查当前熵值:
    cat /proc/sys/kernel/random/entropy_avail
    
    如果输出低于1000,基本可以确定是这个问题。
  • 解决办法:
    • 安装rng-tools来补充系统熵:
      sudo apt-get update && sudo apt-get install rng-tools
      sudo systemctl start rng-tools
      sudo systemctl enable rng-tools
      
    • 或者修改Confluence的JVM启动参数(在setenv.sh里添加),让JVM使用非阻塞的随机源:
      JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
      

2. 检查OCSP证书验证的阻塞问题

老版本Tomcat默认会开启OCSP(在线证书状态协议)验证,启动初期Confluence第一次建立TLS连接时,会向Let's Encrypt的OCSP服务器发起请求,如果网络延迟、DNS解析慢或者服务器响应超时,就会卡住几分钟。

  • 临时测试验证:修改Confluence的Tomcatserver.xml里的SSL Connector配置,添加enableOCSP="false",比如:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" enableOCSP="false"
               keystoreFile="/path/to/your/letsencrypt.p12"
               keystorePass="your-keystore-password" keystoreType="PKCS12"/>
    
    重启Confluence后测试握手速度,如果不再卡顿,说明是OCSP的问题。
  • 长期解决方案:如果你的Confluence捆绑的Tomcat版本在8.5及以上,可以开启OCSP Stapling(把证书状态缓存到服务器,避免每次请求OCSP),在SSL Connector里添加:
    ocspStapling="true"
    ocspStaplingResponderURL="http://ocsp.int-x3.letsencrypt.org/"
    

3. 验证密钥库的加载效率

Let's Encrypt证书转成Tomcat兼容的密钥库(比如PKCS12)时,如果格式有问题或者权限不足,也可能导致启动时加载缓慢。

  • 用keytool直接测试密钥库加载速度:
    keytool -list -keystore /path/to/your/keystore.p12 -storetype PKCS12 -storepass your-password
    
    如果这个命令执行就卡,说明密钥库本身有问题,重新生成一次PKCS12格式的证书:
    openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name confluence -CAfile chain.pem -caname root
    
    同时确保Tomcat运行用户(通常是confluence)对密钥库文件有读权限。

4. 分析strace输出定位阻塞点

你提到有strace输出,重点看卡顿期间的系统调用:

  • 如果是connect()/recvfrom()卡住,并且目标IP是Let's Encrypt的OCSP服务器(比如64.78.149.164),那就是OCSP验证的网络问题。
  • 如果是getrandom()/read()从/dev/random读取,那就是熵池不足的问题。
  • 如果是open()/read()卡住指向密钥库文件,检查文件所在存储的性能和权限。

总结

先从熵池不足和OCSP验证这两个最常见的点入手,这俩在老系统+老Tomcat的组合里最容易导致启动初期的TLS握手阻塞,排查起来也最快。

内容的提问来源于stack exchange,提问作者lucasart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:24:25