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

Java应用间歇性抛出SunCertPathBuilderException问题求助

问题分析与解决:Squid代理间歇性返回无效证书链导致Java SSL握手失败

问题背景

基于Java 17 Temurin的应用通过Squid 5.7代理调用第三方HTTPS接口,此前运行正常,3月3日起间歇性抛出PKIX path building failed异常。使用DebugCert直接测试目标URL时证书链验证正常,但抓包发现Squid会随机返回以下无效证书链:

1 Subject CN=<destination>
   Issuer  CN=squid
   sha1    <numeric>
   md5     <numeric>

 2 Subject CN=squid
   Issuer  CN=squid
   sha1    <numeric>
   md5     <numeric>

 3 Subject CN=squid
   Issuer  CN=squid
   sha1    <numeric>
   md5     <numeric>

可能原因

  • Squid SSL Bump配置异常:启用了SSL拦截(SSL Bump)功能,但用于生成拦截证书的CA配置错误,或动态证书生成逻辑出现随机故障
  • Squid证书缓存损坏:Squid的SSL证书缓存目录(/var/spool/squid/ssl_db/)存在损坏的缓存文件,导致随机返回无效自签名证书
  • Squid版本bug:Squid 5.7存在SSL拦截相关的已知问题,导致证书链构建随机失败
  • 网络链路不稳定:Squid与第三方服务器之间的网络波动,导致无法正确获取目标证书链, fallback到自签名证书

解决方案

  1. 检查SSL Bump配置

    • 确认Squid配置文件中ssl_bump、sslproxy_cafile、sslproxy_certgen等参数配置正确,确保用于签署拦截证书的CA证书有效且未过期
    • 检查sslproxy_cert_error配置,是否因允许忽略证书错误导致异常返回自签名证书
  2. 清理Squid证书缓存

    • 停止Squid服务:systemctl stop squid
    • 删除SSL缓存目录:rm -rf /var/spool/squid/ssl_db/
    • 重新初始化SSL缓存:squid -z
    • 启动Squid服务:systemctl start squid
  3. 验证信任链配置

    • 确认Squid的CA证书已正确导入Java应用的cacerts信任库:
      keytool -importcert -file /path/to/squid-ca.crt -alias squid-ca -keystore /usr/lib/jvm/temurin-17-jdk-amd64/lib/security/cacerts
      
    • 检查导入的CA证书是否未过期:keytool -list -keystore /usr/lib/jvm/temurin-17-jdk-amd64/lib/security/cacerts -alias squid-ca
  4. 升级Squid版本

    • 将Squid 5.7升级到最新稳定版(如5.9或更高),修复已知的SSL拦截相关bug
  5. 临时禁用SSL Bump测试

    • 注释掉Squid配置中的ssl_bump相关规则,重启服务后观察问题是否消失,确认是否为SSL拦截功能导致的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:04:57