Java默认证书异常导致PKIX路径构建失败问题求助
Java默认证书异常导致PKIX路径构建失败问题求助
最近我碰到一个特别棘手的问题:只要运行任何执行纯Java代码的程序(比如编程工具、Java环境相关程序,还有一些基于Java编译的程序)都会报错,但那些只是调用Java的应用却完全不受影响。
举个实际例子,我运行Gradle的时候就会弹出这个错误:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
其他类似的程序也会报一模一样的错。
我已经试过卸载所有JDK和JRE,重新安装,也手动修改了JAVA_HOME和系统Path环境变量,但问题还是没解决。我并没有连接什么自定义的SSL服务器,只是访问Java默认的那些服务,所以完全搞不懂为什么cacerts文件里的默认证书不起作用。
我隐约觉得这个问题是从Java更新之后开始的,大概两个月前就变成这样了。
对了,我也试过用keytool工具,但Java 17里好像找不到需要的.cer文件(至少我没找到)。
补充完整的错误堆栈跟踪:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369) at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:458) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:201) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:589) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1665) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589) at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:529) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308) at net.minecraftforge.installer.DownloadUtils.getConnection(DownloadUtils.java:243) at net.minecraftforge.installer.DownloadUtils.downloadManifest(DownloadUtils.java:307) at net.minecraftforge.installer.json.Util.getVanillaVersion(Util.java:73) at net.minecraftforge.installer.actions.ServerInstall.run(ServerInstall.java:86) at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:423) at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:175) at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:147) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439) at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306) at java.base/sun.security.validator.Validator.validate(Validator.java:264) at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:132) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) ... 24 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:127) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434) ... 29 more Failed to download version manifest, can not find server jar URL.
备注:内容来源于stack exchange,提问作者DeadStar
相关产品推荐
相关产品推荐

