首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java LDAPS 連線 AD 失敗:PKIX 路徑驗證錯誤排查

     編輯:程式設計綜合問答

錯誤堆疊關鍵

javax.net.ssl.SSLHandshakeException: PKIX path validation failed: 
java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

表示客戶端信任存儲(trustStore)中缺少 AD 憑證鏈的根憑證,或憑證鏈不完整。

排查步驟

  1. 確認憑證匯入正確:keytool -list -keystore d:/zhouwd.keystore 檢視是否包含 AD 根 CA 憑證。
  2. 檢查主機名驗證:LDAPS URL 使用 IP(ldaps://10.0.10.164:636),憑證 CN/SAN 必須包含該 IP,否則需實作自訂 HostnameVerifier(不建議生產環境)。
  3. 信任存儲路徑與密碼:確認 javax.net.ssl.trustStore 指向正確檔案,trustStorePassword 正確。
  4. 網路連通性:telnet 10.0.10.164 636 測試連接埠可達。

替代方案(測試環境)

若無法解決憑證鏈問題,可暫時實作信任所有憑證的 TrustManager(僅限測試):

TrustManager[] trustAll = new TrustManager[] {
    new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
    }
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAll, new SecureRandom());
// 將 sc.getSocketFactory() 設定給 LDAP 連線屬性

生產環境建議

  • 從 AD 管理員處獲取完整 CA 憑證鏈(根 + 中繼),匯入 Java truststore(cacerts 或自訂 keystore)。
  • 確保 AD 憑證 SAN 包含客戶端連線使用的主機名/IP。
  • 啟用 Java SSL 偵錯:-Djavax.net.debug=ssl,handshake 定位具體驗證失敗點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved