簡體   English   中英

獲取 PKIX 路徑構建失敗:jdk 更新后 sun.security.provider.certpath.SunCertPathBuilderException

[英]Geting PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException after jdk update

將 Java 版本從 1.8.0_231 更新到 1.8.0_241 后,出現與證書配置相關的錯誤。

在 spring 啟動啟動期間,我正在設置 keystore 和 keystorepass 並在 Spring 框架提供的 RestTemplate 的幫助下進行休息調用。

調用休息服務后,我得到 sun.security.validator.ValidatorException: PKIX path building failed: 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);
            }

        }

首先檢查JDK 1.8.0_231/jre/lib/security目錄下的cacert 文件和jre 目錄中相同位置的cacert 文件。 首先嘗試復制安全文件並粘貼到具有上述位置的另一個版本的 java 中。 它應該可以解決問題。

PKIX 路徑構建失敗

這意味着存在關於信任證書的問題。 所以問題出在你的信托商店。 由於更新 JDK 后問題開始出現,您可能使用了名為“cacerts”的標准 Java 信任庫。 您可以在 JDK_HOME/jre/lib/security/cacerts 中找到它。

將此文件從舊的 JDK 復制到新的 JDK 並測試問題是否已解決。 最好的解決方案是將您需要的證書從舊的 cacerts 復制到新的證書,而不是覆蓋它。 這是因為新的 cacerts 文件將保存來自受信任根方的新證書,而這些新證書不在舊證書中。

我建議使用帶有 UI 的應用程序(例如https://keystore-explorer.org/ )來執行此操作。 它讓您可以拖放或復制粘貼證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM