RootCA 憑證匯入到 cacerts 信任庫後,JRE 無法與 AD 建立 LDAPS 連接

RootCA 憑證匯入到 cacerts 信任庫後,JRE 無法與 AD 建立 LDAPS 連接

LDAPS 透過 ldp.exe 以及 Windows 和 Linux 系統上的許多其他程式運行,這些程式似乎不需要根憑證。根本不。將根 CA 和中間 CA 匯入 cacerts 信任庫後,某些使用 JSSE 的程式無法連線。

我已經測試過將 NTDS\Personal(從 AD)中存在的 LDAPS 憑證直接匯入到 cacerts 中,並且在某些使用 java 的應用程式中,這會導致安全 LDAP 正常運作。

在使用 java 並失敗的程式中,當匯入根憑證時,我收到錯誤:

[根異常是 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX 路徑驗證失敗: java.security.cert.CertPathValidatorException: 簽章檢查失敗]

如果我匯入 LDAPS 證書,有時會收到錯誤:

[根異常是 javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: 憑證不符合演算法約束]

(即使註解掉 java.security 之後)

或者它根據使用 JRE 的程式開始工作;然而,常見的障礙是 JRE 似乎普遍不喜歡基於錯誤的憑證鏈。

MY CDP/AIA 可透過 HTTP 在內部使用,所有憑證均由受信任的私有內部 2 層 Windows PKI 簽署。

openssl s_client -connect -showcerts domain:port

傳回正確的憑證鏈,但也回傳錯誤:

verify error:num=20:unable to get local issuer certificate

這顯然與 openssl 沒有看到根憑證有關,所以即使有-cafile附錄,我也會得到相同的錯誤,這可能很能說明問題,但根憑證的憑證鏈中的指紋與根憑證相同,所以-cafile看起來應該是正確的...

在這一點上,我開始認為所有「如何使用 Java 啟用 LDAPS」中的 70% 都是錯誤的(它們肯定都相互矛盾),並且 JAVA CAPS 的規則對於我的原因更有意義我需要導入實際的LDAPS證書,而不僅僅是信任根證書。https://docs.oracle.com/cd/E19509-01/820-3399/ggfrj/index.html

編輯:請參閱答案

那麼這聽起來像是我的憑證的設定問題還是聽起來像是發生了其他 Java 特定的問題?

答案1

事實證明,我在設定 PKI 方面所做的一切在技術上都是正確的。這些錯誤是因為我的憑證是使用 RSASSA-PSS 簽署的。 Java 1.8 不支援 PKCS #1 v2.1。

我必須重新產生從根到頒發 CA 的整個憑證鏈。這需要編輯 CAPolicy.inf

AlternateSignatureAlgorithm=10

還有命令列 certutil -setreg ca\csp\alternatesignaturealgorithm 0

也需要手動指定。

這似乎是一個憑證問題,但我從未想過簽名相容性會成為一個問題。學過的知識。

相關問題: Microsoft 憑證授權單位提供者相容性

相關來源: https://pkisolutions.com/pkcs1v2-1rsassa-pss/

相關內容