He intentado que funcione una conexión SSL a un servidor LDAPS (Active Directory), pero sigo teniendo problemas. Intenté usar esto:
openssl s_client -connect the.server.edu:3269
Con el siguiente resultado:
verify error:num=20:unable to get local issuer certificate
Pensé, OK, bueno, el servidor es un viejo servidor de producción de hace unos años. Quizás el CA no está presente. Luego saqué el certificado de la salida a un archivo pem e intenté:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
Y eso tampoco funcionó.
¿Qué me estoy perdiendo? ¿No debería eso SIEMPRE funcionar?
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem')
Después de esto, pude usar STARTTLS (dentro del puerto LDAP 389) como se esperaba.Respuestas:
Entonces, esto es lo que veo como el nombre del certificado de CA:
Ese era el nombre del certificado que había importado después de que hice las presentaciones en mi segundo intento anterior. Enumeré los certificados en el almacén de claves haciendo esto:
Veo el certificado de CA allí.
Para asegurarme de que openssl está usando el almacén de claves que estoy usando con el servidor, estoy usando el argumento -CAfile:
Sabiendo que el almacén de claves de Java para CA tiene una contraseña, intenté usar la opción -pass pass: password de esta manera:
pero eso tampoco funcionó.
Lo curioso es que el archivo cacerts tiene una contraseña y openssl no se queja de que no puede leer el archivo cacerts. Eso me parece sospechoso. ¿Eso o algo más te suena?
fuente
Ese error es la forma en que OpenSL dice: "No puedo seguir la cadena de certificados hasta una raíz confiable". Acabo de hacer el mismo comando para mis propios servidores AD y obtengo una cadena de certificados completa, pero el certificado superior tiene ese error exacto. Si tiene la clave de pub de la CA que firmó el certificado, puede especificarlo con las opciones
-CAfile
o-CApath
fuente
Si está utilizando OpenLDAP, puede configurar:
en su
openldap.conf
archivo, que le indica a OpenLDAP que no intente la verificación del certificado. Hay una opción similar si está haciendo autenticación LDAP con Apache.Si realmente desea realizar la verificación del certificado, lo siguiente puede ser útil:
No lo creo. Si bien lo siguiente puede sonar definitivo, en realidad es solo mi mejor invitado:
Lo que intentó solo funcionaría para un certificado autofirmado. Debido a que el certificado fue emitido por la CA de Windows, intentar usar el certificado del servidor como argumento para
-CAfile
no obtener nada.No necesariamente no. No hay garantía de que el servidor remoto presente el certificado de CA en su salida. Primero debe mirar al emisor del certificado del servidor:
... y luego vea si uno de los otros certificados que tiene coincide con ese emisor.
fuente