首頁  >  文章  >  Java  >  ## 為什麼我的 Java 用戶端在存取 HTTPS Web 服務時收到「PKIX 路徑建置失敗」錯誤?

## 為什麼我的 Java 用戶端在存取 HTTPS Web 服務時收到「PKIX 路徑建置失敗」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-10-26 17:52:03375瀏覽

## Why does my Java client get a

PKIX 路徑構建失敗:無法找到請求目標的有效證書路徑

問題:

嘗試使用Java 用戶端存取特定HTTPS Web 服務時,遇到以下異常:

java.lang.RuntimeException: PKIX path building failed: unable to find valid certification path to requested target

答案:

此異常表明由於伺服器提供的憑證鏈存在問題,Java 用戶端無法與Web 服務建立安全連線。

可能的解決方案:

  1. 設定信任儲存:

    客戶端可能沒有在其信任儲存中安裝必要的憑證。若要解決此問題,請設定係統屬性以指定信任儲存的路徑及其密碼:

    <code class="java">System.setProperty("javax.net.ssl.trustStore", "clientTrustStore.key");
    System.setProperty("javax.net.ssl.trustStorePassword", "password");</code>
  2. 匯入伺服器憑證:

    如果用戶端的信任儲存區不包含伺服器的證書,請手動匯入。請依照下列步驟操作:

    • 使用 openssl 等工具以 PEM 格式匯出伺服器的憑證(例如,certificate.crt)。
    • 將PEM 檔案轉換為二進位X .509 憑證檔案(例如,certificate.der):

      <code class="shell">openssl x509 -in certificate.pem -out certificate.der -outform DER</code>
    • 使用DERtool 實用程式將DER 檔案匯入客戶端的信任儲存:

      <code class="shell">keytool -import -alias server_cert -file certificate.der -keystore clientTrustStore.key</code>
  3. 更新Java SSL 設定:

    確保更新Java SSL 設定:

    <code class="shell">keytool -import -alias server_cert -file certificate.der -keystore cacerts</code>
  4. 確保。例如,透過修改~/.java/jre/lib/security/jssecacerts 或使用以下命令:
  5. 停用SSL 憑證驗證(不建議):

    <code class="java">HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);</code>
  6. 作為臨時措施,您可以停用SSL 憑證驗證,但出於安全考慮,不建議這樣做:
  7. 取得不同的證書:

如果Web 服務需要特定證書,請取得該證書並將其安裝在客戶端的信任儲存中。

以上是## 為什麼我的 Java 用戶端在存取 HTTPS Web 服務時收到「PKIX 路徑建置失敗」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn