Java连接MySQL配置useSSL后连接报证书不信任:java.security.cert.CertPathValidatorException...

【异常日志】

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) ~[na:1.8.0_162]
    at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79) ~[na:1.8.0_162]
    at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292) ~[na:1.8.0_162]
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:295) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    ... 98 common frames omitted

【问题分析】

MySQL使用了SSL连接,但MySQL服务端配置SSL证书不受信任。

【解决方案】

方法一、(这种方法最简单)如果数据库所在的网络环境是绝对安全或者只是开发环境的情况下,可以直接忽略服务端证书信任验证。具体实现方法是在JDBC连接字符串中添加verifyServerCertificate=false参数。

jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true&verifyServerCertificate=false

方法二、在可以获取到受信任证书的情况下,可以配置服务端证书为受信任的证书。具体实现方法是先将证书复制到MySQL服务器上,然后在MySQL的配置文件(Linux系统下确认为/etc/my.cnf)中添加配置。

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

* 注: 其中的证书路径需要规换成正确的受信任证书存放路径。

方法三、也可以找到找到服务端的证书,后添加服务端CA证书到受信任的根证书颁发机构中。

转载于:https://my.oschina.net/u/2362245/blog/1799475

你可能感兴趣的:(Java连接MySQL配置useSSL后连接报证书不信任:java.security.cert.CertPathValidatorException...)