LDAPS 正在通过 ldp.exe 以及 Windows 和 linux 系统上的许多其他程序运行,这些程序似乎不需要根证书。根本。某些使用 JSSE 的程序在将根 CA 和中间 CA 导入 cacerts 信任库后无法连接。
我已经测试过将 NTDS\Personal(来自 AD)中的 LDAPS 证书直接导入 cacerts,并且在某些使用 java 的应用程序中,这会导致安全 LDAP 工作。
在使用 java 并失败的程序中,当导入根证书时,我收到错误:
[Root 异常是 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径验证失败:java.security.cert.CertPathValidatorException:签名检查失败]
如果我导入 LDAPS 证书,有时会收到错误消息:
[Root 异常是 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
Run Code Online (Sandbox Code Playgroud)
返回正确的证书链,但也返回错误:
verify error:num=20:unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)
这显然与 openssl 没有看到根证书有关,所以即使有-cafile
附录,我也会得到同样的错误,这可能说明问题,但是根证书的证书链中的指纹与 相同,-cafile …