获取 PKIX 路径构建失败:jdk 更新后 sun.security.provider.certpath.SunCertPathBuilderException
Posted
技术标签:
【中文标题】获取 PKIX 路径构建失败:jdk 更新后 sun.security.provider.certpath.SunCertPathBuilderException【英文标题】:Geting PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException after jdk update 【发布时间】:2020-06-17 19:21:17 【问题描述】:将 java 版本从 1.8.0_231 更新到 1.8.0_241 后,我收到与证书配置相关的错误。
在 Spring Boot 启动期间,我正在设置 keystore 和 keystorepass 并在 Spring 框架提供的 RestTemplate 的帮助下进行休息调用。
调用休息服务后,我得到 sun.security.validator.ValidatorException: PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径;嵌套异常是 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX 路径错误。
相同的代码在 JDK 1.8.0_231 上运行良好。任何人都可以帮助我造成问题的原因。
我配置keystore和keystorepassowrd如下图
System.setProperty("javax.net.ssl.keyStore", environment.getProperty("javax.net.ssl.keyStore"));
String pswd = null;
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new
FileInputStream(environment.getProperty("javax.net.ssl.keyStorePassword")), Charset.defaultCharset())))
pswd = br.readLine();
if (pswd != null)
System.setProperty("javax.net.ssl.keyStorePassword", pswd);
【问题讨论】:
【参考方案1】:首先检查JDK 1.8.0_231/jre/lib/security
目录中的cacert文件和jre目录中相同位置的相同文件。首先尝试复制安全文件并粘贴到具有上述位置的另一个版本的 java 中。它应该可以解决问题。
【讨论】:
具体检查cacerts
文件。
我使用 pkcs(cacert
文件【参考方案2】:
PKIX 路径构建失败
这意味着信任证书存在问题。所以问题出在您的信任库上。由于问题在更新 JDK 后开始出现,您可能使用的是名为“cacerts”的标准 java 信任库。您可以在 JDK_HOME/jre/lib/security/cacerts 中找到它。
将此文件从旧 JDK 复制到新 JDK 并测试问题是否已解决。 最好的解决方案是然后将您需要的证书从旧的 cacerts 复制到新的证书,而不是覆盖它。这是因为新的 cacerts 文件将保存来自受信任的根方的新证书,这些证书不会在旧证书中。
我建议使用带有 UI 的应用程序,例如 https://keystore-explorer.org/,来执行此操作。它让您可以拖放或复制粘贴证书。
【讨论】:
我使用 pkcs(以上是关于获取 PKIX 路径构建失败:jdk 更新后 sun.security.provider.certpath.SunCertPathBuilderException的主要内容,如果未能解决你的问题,请参考以下文章
“PKIX 路径构建失败”和“无法找到请求目标的有效证书路径”