Tengo un servidor LDAP (controlador de dominio de Active Directory) con un certificado firmado por una CA intermediaria interna y que, por supuesto, está firmado por una CA raíz interna. Siento que estoy pasando por alto algo fundamental sobre PKI aquí porque pensé que necesitaba los archivos CA intermediarios y CA raíz en el lado del cliente para establecer confianza con el certificado que presenta el servidor LDAP, así que no entiendo por qué ambos Los comandos tienen éxito. Son idénticos excepto que el primero confía tanto en la CA raíz como en la CA intermediaria, mientras que el segundo SÓLO confía en el certificado raíz. Esperaba que el primer comando funcionara pero no el segundo. (He verificado dos veces que la salida sea idéntica incluso cuando no se usa grep
y que el contenido de los archivos .crt sea correcto).
¿Qué estoy entendiendo mal?
export LDAPTLS_CACERT=./chained.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password:
result: 0 Success
export LDAPTLS_CACERT=./root_cert_only.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password:
result: 0 Success
# and just for fun, let's try it without trusting any CAs. it fails as expected.
export LDAPTLS_CACERT=''; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)"
ldap_start_tls: Connect error (-11)
additional info: TLS error -8179:Peer's Certificate issuer is not recognized.
Nota: Aprendí por las malas que ldapsearch
en macOS no se admiten certificados de confianza a través de una ruta establecida en una variable de entorno. El resultado anterior es de Linux ( ldapsearch
versión 2.4.40)
Respuesta1
El primer comando (con CA raíz y subordinada) funciona porque su cliente confía explícitamente en el certificado raíz (está en el almacén de anclaje de confianza) y esta raíz ha firmado el certificado de CA subordinada, por lo tanto, su cliente también confía implícitamente en él.
El segundo comando funciona porque la especificación TLSestadosque servidoresdebeenvíe todos los certificados necesarios para validar el certificado del servidor. Por lo tanto, su servidor LDAP envía su certificado, seguido del certificado de CA subordinado.
Efectivamente, ambos comandos son iguales. En el primer ejemplo, el cliente recibe el certificado de CA subordinada tanto desde la línea de comando como desde el servidor.
Tenga en cuenta que el servidor no necesita enviar el certificado raíz, ya que éste ya debe estar instalado en su cliente y ser confiable.