JRE no puede establecer una conexión LDAPS con AD después de importar el certificado RootCA al almacén de confianza de cacerts

JRE no puede establecer una conexión LDAPS con AD después de importar el certificado RootCA al almacén de confianza de cacerts

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 -cafileel 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, -cafilepor 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=1a0

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/

información relacionada