Active-Directory

將 RootCA 證書導入 cacerts 信任庫後,JRE 無法與 AD 建立 LDAPS 連接

  • March 26, 2018

LDAPS 通過 ldp.exe 以及 Windows 和 linux 系統上的許多其他程序執行,這些程序似乎不需要根證書。一點也不。某些使用 JSSE 的程序在將根 CA 和中間 CA 導入 cacerts 信任庫後無法連接。

我已經測試將 NTDS\Personal 中存在的 LDAPS 證書(來自 AD)直接導入到 cacerts 中,並且在某些使用 java 的應用程序中,這會導致安全 LDAP 工作。

在使用 java 並失敗的程序中,當導入根證書時,我收到錯誤:

$$ Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed $$

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

$$ Root exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints $$

(即使在註釋掉 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 的規則對於為什麼我更有意義m 需要導入實際的 LDAPS 證書,而不僅僅是信任根證書。https://docs.oracle.com/cd/E19509-01/820-3399/ggfrj/index.html

編輯:查看答案

那麼這聽起來像是我的證書的配置問題,還是聽起來像是發生了其他 Java 特定的事情?

事實證明,在設置 PKI 方面,我在技術上所做的一切都是正確的。錯誤是因為我的證書是用 RSASSA-PSS 簽名的。Java 1.8 不支持 PKCS #1 v2.1。

我不得不重新生成從根到頒發 CA 的整個證書鏈。這需要編輯 CAPolicy.inf

AlternateSignatureAlgorithm=1到*0*

還有 cmd 行 certutil -setreg ca\csp\alternatesignaturealgorithm 0

也需要手動指定。

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

相關問題: Microsoft 證書頒發機構提供程序兼容性

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

引用自:https://serverfault.com/questions/901692