PKIX路径构建失败:jdk更新后,sun.security.provider.certpath.SunCertPathBuilderException

时间:2020-03-05 08:02:24

标签: java spring spring-boot ssl

将Java版本从1.8.0_231更新到1.8.0_241之后,出现与证书配置有关的错误。

在spring boot starup期间,我正在设置Spring所提供的RestTemplate的帮助下设置keystore和keystorepass并进行一次rest调用。

调用REST服务后,我得到了sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求目标的有效认证路径;嵌套的异常是javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径错误。

同一代码在JDK 1.8.0_231上运行正常。有什么可以帮助我解决问题的原因吗?

我如下所示配置了密钥库和密钥库密码

        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);
            }

        }

2 个答案:

答案 0 :(得分:0)

首先在JDK 1.8.0_231/jre/lib/security目录中检查cacert文件,在jre目录中也检查相同位置的cacert文件。首先尝试复制安全文件并粘贴到具有上述位置的其他Java版本中。应该可以解决问题。

答案 1 :(得分:0)

PKIX路径构建失败

这意味着存在有关信任证书的问题。所以问题出在您的信任库上。由于问题是在更新JDK之后开始的,因此您可能正在使用称为'cacerts'的标准Java信任库。您可以在JDK_HOME / jre / lib / security / cacerts中找到它。

将此文件从旧版本复制到新的JDK,然后测试问题是否已解决。 最好的解决方案是只将所需的证书从旧证书复制到新证书,而不是覆盖证书。这是因为新的cacerts文件将保存来自旧根信任方的新证书。

我建议使用带有UI的应用程序(例如https://keystore-explorer.org/)来执行此操作。它使您可以拖放或复制粘贴证书。