JDBC:SunCertPathBuilderException:无法找到到请求目标的有效证书路径

时间:2019-02-01 11:49:39

标签: mysql ssl jdbc ssl-certificate

我一直在努力通过JDBC实现MySQL SSL连接。

我已经将CA证书导入到自定义JKS信任库中,并将客户端密钥和客户端证书作为自定义JKS密钥库中的PKCS12,然后将它们作为参数传递给下面的代码。

jdbc:mysql://hostname:port/dbname?useSSL=true&requireSSL=true&trustCertificateKeyStoreUrl=file:///path/to/truststore_mysql.ks&trustCertificateKeyStorePassword=mypass&clientCertificateKeyStoreUrl=file:///path/to/keystore_cert_mysql.ks&clientCertificateKeyStorePassword=mypass

但由于以下原因而无法工作: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

启用SSL调试,我可以看到:

%% Invalidated: [Session-1, TLS_DHE_RSA_WITH_AES_256_CBC_SHA] http-nio-8080-exec-4, SEND TLSv1 ALERT: fatal, description = certificate_unknown http-nio-8080-exec-4, WRITE: TLSv1 Alert, length = 2 http-nio-8080-exec-4, called closeSocket()

奇怪的是,一切都可以通过keystore和truststore文件作为VM参数传递。

-Djavax.net.ssl.keyStore=/path/to/keystore_cert_mysql.ks -Djavax.net.ssl.keyStorePassword=mypass -Djavax.net.ssl.trustStore=/path/to/truststore_mysql.ks -Djavax.net.ssl.trustStorePassword=mypass

问题是:为什么不使用JDBC连接URL参数?

在此先感谢您的英语。

0 个答案:

没有答案