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

使用自签名证书的Restful服务突发SSLHandshakeException问题求助

解决自签名证书导致的PKIX路径构建失败问题

Hey,这种突然掉链子的情况我太熟了!你之前一直正常运行,没关机的情况下下午突然报错,咱们先从最常见的几个坑入手排查:

1. 先查服务器系统时间!(最容易忽略的坑)

很多时候这种突然的证书验证失败,都是系统时间乱了导致的。比如服务器时间突然跳到未来,或者回退到过去,让原本有效的证书看起来过期了,或者新生成的证书还没到生效时间。

  • 用命令检查时间:Linux下敲date,Windows直接看系统时间,确认和实际时间完全一致。
  • 如果时间不对,赶紧同步:Linux可以用sudo ntpdate pool.ntp.org(需要ntp工具),Windows直接在时间设置里同步官方时间服务器。

2. 确认Tomcat实际在用哪个信任库

你说修改cacerts后复制到Tomcat conf目录,但这里有个很容易踩的坑:Tomcat默认不会用conf目录下的cacerts!默认情况下,JVM会用自己JRE目录里的lib/security/cacerts。

  • 检查Tomcat的启动参数:看看启动脚本(比如catalina.sh)里有没有配置-Djavax.net.ssl.trustStore参数,如果有,这个路径才是真正生效的信任库,你之前替换的conf目录文件根本没被用到。
  • 如果没指定这个参数,那去JRE的lib/security/cacerts看看,是不是这个文件里的证书过期了,而你之前更新的是conf目录里的无效文件。

3. 检查信任库中的证书状态

不管是哪个路径的cacerts,先用keytool命令看看里面的证书有效期:

keytool -list -v -keystore /path/to/your/cacerts -storepass changeit

(默认密码是changeit,如果你改过就用自己的密码)

  • 看看列表里你的自签名证书有效期是不是已经过期了?
  • 确认新生成的证书有没有被正确导入进去?如果找不到新证书,说明自动生成/导入的脚本出问题了。

4. 自动生成证书的脚本是不是“罢工”了?

你说旧证书过期时会自动生成新证书,那得检查这个脚本有没有正常工作:

  • 查看脚本的运行日志,确认上周五下午之前有没有成功生成新证书,有没有执行导入到信任库的步骤。
  • 如果是定时任务(比如Linux的cron),去看定时任务的日志,确认任务有没有按时触发,有没有报错。

5. 证书导入过程有没有犯低级错误?

如果新证书生成了但没生效,可能是导入时没加关键参数:
导入证书时一定要加-trustcacerts,不然证书不会被加入到信任锚列表里,JVM还是不认它。正确的导入命令应该是:

keytool -import -trustcacerts -alias your-cert-alias -file /path/to/new/cert.cer -keystore /path/to/cacerts -storepass changeit

最后一步:重启Tomcat!

JVM启动时会把信任库加载到内存里,运行期间不会自动重新读取文件。哪怕你已经替换了正确的cacerts,不重启Tomcat的话,它还是用的旧内存缓存。所以排查完上面的问题后,重启Tomcat试试,大概率就能恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:33