LDAPS funciona a través de ldp.exe y de otros programas en sistemas Windows y Linux que no parecen requerir el certificado raíz. en absoluto. Algunos programas que usan JSSE no logran conectarse después de importar la CA raíz e intermedia al almacén de confianza de cacerts.
Probé la importación del certificado LDAPS presente en NTDS\Personal (desde AD) directamente a cacerts, y en ciertas aplicaciones que usan Java, esto hace que funcione LDAP seguro.
En programas que usan java y fallan, cuando se importa el certificado raíz recibo el error:
[La excepción raíz es javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: error en la validación de la ruta PKIX: java.security.cert.CertPathValidatorException: error en la verificación de firma]
Si importo el certificado LDAPS a veces recibo el error:
[La excepción raíz es javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: los certificados no se ajustan a las restricciones del algoritmo]
(incluso después de comentar java.security)
Ocomienza a funcionar dependiendo del programa que usa JRE; sin embargo, el obstáculo común es que a JRE en general no parece gustarle la cadena de certificados en función de los errores.
MY CDP/AIA está disponible a través de HTTP internamente y todos los certificados están firmados por una PKI de Windows interna de 2 niveles privada y confiable.
openssl s_client -connect -showcerts domain:port
Devuelve la cadena de certificados correcta, pero también el error:
verify error:num=20:unable to get local issuer certificate
Lo que evidentemente está relacionado con que openssl no ve el certificado raíz, por lo que incluso con -cafile
el apéndice aparece el mismo error, lo cual puede ser revelador, pero la huella digital en la cadena de certificados para el certificado raíz es la misma que la del certificado raíz, -cafile
por lo que parece que debería ser correcta. ...
En este punto, estoy empezando a pensar que el 70% de todos los "Cómo habilitar LDAPS con Java" son incorrectos (sin duda, todos se contradicen bastante entre sí), y que las reglas para JAVA CAPS tienen más sentido para explicar por qué estoy Se me exige que importe el certificado LDAPS real en lugar de simplemente confiar en el certificado raíz.https://docs.oracle.com/cd/E19509-01/820-3399/ggfrj/index.html
Editar: ver respuesta
Entonces, ¿parece un problema de configuración con mi certificado o parece que está sucediendo algo más específico de Java?
Respuesta1
Resulta que hice todo técnicamente correcto en términos de configurar la PKI. Los errores se debieron a que mis certificados estaban firmados con RSASSA-PSS. Java 1.8 no es compatible con PKCS #1 v2.1.
Tuve que regenerar toda la cadena de certificados desde la raíz hasta la CA emisora. Esto requirió editar CAPolicy.inf
AlternateSignatureAlgorithm=1
a0
También la línea cmd
certutil -setreg ca\csp\alternatesignaturealgorithm 0
También era necesario especificarlo manualmente.
Parecía un problema de certificado, pero nunca pensé que la compatibilidad de firmas sería el problema. Lección aprendida.
Asunto relacionado: Compatibilidad con proveedores de autoridades de certificación de Microsoft
Fuentes relacionadas: https://pkisolutions.com/pkcs1v2-1rsassa-pss/