java.security.cet.CertPathValidatorException: Path does not chain with any of the trust anchors 解决办法

本文介绍了在使用SpringBoot+Mybatis+MySQL开发过程中遇到的证书路径验证器异常问题及解决方法。通过关闭证书校验(设置useSSL=false),可以快速解决启动失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题简介:

项目使用的是 Spring Boot + Mybatis + MySQL 进行开发的,数据库访问使用 Spring Boot Data JPA ,主要用于简化 RDBMS 关系型数据库的访问与CRUD 操作。但是在启动项目时,启动失败,证书路径验证器异常 ,异常信息如下:

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1937)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1478)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:969)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:904)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1050)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186)
    ... 153 common frames omitted
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:302)
    at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:922)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1460)
    ... 161 common frames omitted
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:153)
    at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79)
    at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292)
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:295)
    ... 163 common frames omitted
14:03:23.865 [restartedMain] ERROR c.a.d.p.DruidDataSource - [init,905] - {dataSource-1} init error
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

部分截图如下:
这里写图片描述

解决办法:

通常,我们连接数据库时,为了数据传输的安全性,都开启了证书的校验,如下图:
这里写图片描述

这儿只需要将证书的校验关闭即可,修改 useSSL=false
关于这个解决办法,只是解决了燃眉之急,让项目跑起来,具体的问题还在深入的探索中,如果那位仁兄有更好的问题探究和深入的解决方案,欢迎留言,在此万分感激!!!


好了,关于 java.security.cet.CertPathValidatorException: Path does not chain with any of the trust anchors 解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。

### 解决方案概述 当遇到 `PKIX path validation failed` 错误时,通常意味着 SSL/TLS 握手过程中无法验证服务器证书的有效性。具体来说,客户端未能找到一条从服务器提供的证书到本地信任库中的可信根证书的信任链[^1]。 ### 原因分析 此问题可能由多种因素引起: - **缺少中间证书**:如果服务器配置中遗漏了必要的中间CA证书,则客户端将无法构建完整的认证路径。 - **受信存储更新不足**:本地JVM使用的cacerts文件未包含最新的或必需的根证书。 - **时间同步问题**:系统时间和NTP设置不正确可能导致有效性检查失败,特别是对于带有严格有效期限的证书[^3]。 ### 实施解决方案 #### 方法一:确认并安装缺失的中间证书 确保Web应用服务器已正确定义整个证书链条,包括所有上级颁发机构签发给该站点的中间证书。这可以通过联系证书提供商获取完整链来完成。 #### 方法二:更新Java KeyStore (JKS) 定期下载最新版本的浏览器兼容型CA列表,并将其导入至运行应用程序所依赖的那个特定版本的JRE/JDK自带keystore内: ```bash keytool -importcert -alias exampleca -file /path/to/intermediate.crt -keystore $JAVA_HOME/lib/security/cacerts ``` 默认密码通常是`changeit`. #### 方法三:校准操作系统与时钟服务 保证主机的时间戳处于合理范围内,因为过期或未来的日期都会触发类似的错误消息。可以考虑部署专业的网络授时协议(NTP)客户程序以保持精准度。 #### 方法四:调试模式启用 为了更深入地了解具体的验证过程,在启动参数里加入如下选项可以帮助收集诊断信息: ```properties -Djavax.net.debug=ssl,trustmanager ``` 这样可以在日志输出中看到详细的握手流程以及每一步骤的状态报告。 ### 验证修复效果 重启受影响的服务之后尝试重现原始场景;正常情况下应该不会再碰到相同的异常状况。另外也可以通过命令行工具如`openssl s_client`来进行独立测试。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值