spring - 引起:javax.net.ssl.SSLHandshakeException: PKIX 路径构建 [Spring boot 项目]
问题描述
我有个问题。我不断收到 SSL 异常。我确实配置了这些东西:
- 已将证书文件添加到 java cacerts
- 已经在我的 Spring Boot 项目中添加了 SSL 配置
但是当我尝试从 Spring Boot 项目调用外部 API 时出现 SSL 异常。
原因:javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径 Apr 02 10:04:44 java[13294]:在 sun。 security.ssl.Alert.createSSLException(Alert.java:131) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.TransportContext.fatal(TransportContext.java:324) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.TransportContext.fatal(TransportContext.java:267) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.TransportContext.fatal(TransportContext.java:262 ) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.ssl .CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473)4 月 2 日 10:04:44 java[13294]:在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369)4 月 2 日 10:04:44 java[13294]:在 sun.security。 ssl.SSLHandshake.consume(SSLHandshake.java:377) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444) Apr 02 10:04:44 java[ 13294]:在 sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422) Apr 02 10:04:44 java[13294]:在 sun.security.ssl.TransportContext.dispatch(TransportContext.java:182) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.SSLTransport.decode(SSLTransport.java:149) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.SSLSocketImpl.decode (SSLSocketImpl.java:1143)4 月 2 日 10:04:44 java[13294]:在 sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1054)4 月 2 日 10:04:44 java[13294]:在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394) Apr 02 10:04:44 java[13294]: 在 sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 4 月 2 日 10:04:44 java[13294]:在 sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 4 月 2 日 10:04:44 java[13294]:在 sun.net。 www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1340) Apr 02 10:04:44 java[13294]: 在 sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1315) Apr 02 10:04:44 java[13294]: 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264) Apr 02 10:04:44 java[13294]: 在 com.sun.xml .internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:104) Apr 02 10:04:44 dbx-gauli java[13294]:... 124 更多 Apr 02 10:04:44 java[13294]:原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath。 SunCertPathBuilderException:无法找到请求目标的有效证书路径 Apr 02 10:04:44 java[13294]:在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:456) Apr 02 10:04:44 java[13294 ]:在 sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:323) Apr 02 10:04:44 java[13294]:在 sun.security.validator.Validator.validate(Validator.java:271) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:315) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.X509TrustManagerImpl.checkTrusted( X509TrustManagerImpl.java:223) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl。X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129) Apr 02 10:04:44 java[13294]: 在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) Apr 02 10:04:44 java[ 13294]:... 140 更多 Apr 02 10:04:44 java [13294]:原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径 Apr 02 10:04:44 java [13294]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04:44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder. java:126) 4 月 2 日 10:04:44 java[13294]:在 java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 4 月 2 日 10:04:44 java[13294]:在 sun.security。验证器.PKIXValidator.doBuild(PKIXValidator.java:451)checkServerTrusted(X509TrustManagerImpl.java:129)4 月 2 日 10:04:44 java[13294]:在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)4 月 2 日 10:04:44 java[13294] : ... 140 更多 Apr 02 10:04:44 java[13294]: 原因:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294 ]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java: 126) 4 月 2 日 10:04:44 java[13294]:在 java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 4 月 2 日 10:04:44 java[13294]:在 sun.security.validator。 PKIXValidator.doBuild(PKIXValidator.java:451)checkServerTrusted(X509TrustManagerImpl.java:129)4 月 2 日 10:04:44 java[13294]:在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)4 月 2 日 10:04:44 java[13294] : ... 140 更多 Apr 02 10:04:44 java[13294]: 原因:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294 ]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java: 126) 4 月 2 日 10:04:44 java[13294]:在 java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 4 月 2 日 10:04:44 java[13294]:在 sun.security.validator。 PKIXValidator.doBuild(PKIXValidator.java:451)451)451)129) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) 4 月 2 日 10:04:44 java[13294]: ... 140 更多4 月 2 日 10:04:44 java [13294]:原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径 4 月 2 日 10:04:44 java [13294]:在 sun.security .provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10: 04:44 java[13294]: at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04:44 java[13294]: at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.爪哇:451)129) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) 4 月 2 日 10:04:44 java[13294]: ... 140 更多4 月 2 日 10:04:44 java [13294]:原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径 4 月 2 日 10:04:44 java [13294]:在 sun.security .provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10: 04:44 java[13294]: at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04:44 java[13294]: at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.爪哇:451)CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) Apr 02 10:04:44 java[13294]: ... 140 更多 Apr 02 10:04:44 java[13294]: 原因:sun.security.provider。 certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04: 44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10:04:44 java[13294]:在 java.security.cert.CertPathBuilder.build(CertPathBuilder. java:280) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) Apr 02 10:04:44 java[13294]: ... 140 更多 Apr 02 10:04:44 java[13294]: 原因:sun.security.provider。 certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) Apr 02 10:04: 44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10:04:44 java[13294]:在 java.security.cert.CertPathBuilder.build(CertPathBuilder. java:280) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java :141) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 4 月 2 日 10:04:44 java[13294]: 在 java.security .cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04:44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径 Apr 02 10:04:44 java[13294]:在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java :141) 4 月 2 日 10:04:44 java[13294]: 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 4 月 2 日 10:04:44 java[13294]: 在 java.security .cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04:44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10:04:44 java[13294]: at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04 :44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) Apr 02 10:04:44 java[13294]: at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) Apr 02 10:04 :44 java[13294]: 在 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)
我的 Java 配置如下所示:
SSLContext sslContext = SSLContext.getInstance("SSL");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers =============");
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkClientTrusted =============");
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkServerTrusted =============");
}
} }, new SecureRandom());
SSLSocketFactory sf = new SSLSocketFactory(sslContext);
Scheme httpsScheme = new Scheme("https", 443, sf);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);
解决方案
推荐阅读
- javascript - 如何在 puppeteer 中使用 setTimeout
- c# - 我应该如何计算 Lerp 的速度?
- laravel - Laravel Livewire:日期选择器输入被擦除,无法提交
- remoteapp - 有没有办法在远程桌面服务器端添加一些远程应用程序窗口身份信息?
- phpunit - 如何在 phpunit-bridge 中为 symfony 第二次运行后强制显示所有弃用通知?
- flutter - 在 FutureBuilder 中关闭加载对话框
- java - 使用 jsoup 将 html 解析为文档会创建“转换”
- assembly - 为什么 C 语言构建过程包括“汇编”过程?
- python - PyAutoGUI 间歇性失败,“WindowsError("windll.user32.ReleaseDC failed : return 0")
- unity3d - 如何在 Unity 的 Assets 中打包文件以减少数量?