Ich habe einen LDAP-Server (Active Directory-Domänencontroller) mit einem Zertifikat, das von einer internen Zwischenzertifizierungsstelle und natürlich von einer internen Stammzertifizierungsstelle signiert ist. Ich habe das Gefühl, dass ich hier etwas Grundlegendes zu PKI übersehe, weil ich dachte, ich bräuchte sowohl die Zwischenzertifizierungsstellen- als auch die Stammzertifizierungsstellendateien auf der Clientseite, um Vertrauen in das vom LDAP-Server vorgelegte Zertifikat herzustellen. Daher verstehe ich nicht, warum beide Befehle erfolgreich sind. Sie sind identisch, außer dass der erste sowohl der Stammzertifizierungsstelle als auch der Zwischenzertifizierungsstelle vertraut, während der zweite NUR dem Stammzertifikat vertraut. Ich hatte erwartet, dass der erste Befehl funktioniert, aber nicht der zweite. (Ich habe doppelt überprüft, dass die Ausgabe auch bei Nichtverwendung identisch ist grep
und dass der Inhalt der .crt-Dateien korrekt ist.)
Was verstehe ich falsch?
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.
Hinweis: Ich habe auf die harte Tour gelernt, dass ldapsearch
es unter macOS nicht unterstützt wird, Zertifikaten über einen in einer Umgebungsvariable festgelegten Pfad zu vertrauen. Die obige Ausgabe stammt von Linux ( ldapsearch
Version 2.4.40).
Antwort1
Der erste Befehl (mit Stamm- und untergeordneten CAs) funktioniert, weil Ihr Client dem Stammzertifikat explizit vertraut – es befindet sich im Trust-Anchor-Speicher – und diese Stammzertifizierungsstelle das untergeordnete CA-Zertifikat signiert hat, weshalb Ihr Client diesem auch implizit vertraut.
Der zweite Befehl funktioniert, weil die TLS-SpezifikationZuständedass ServermussSenden Sie alle Zertifikate, die zur Validierung des Serverzertifikats erforderlich sind. Dazu sendet Ihr LDAP-Server sein Zertifikat, gefolgt vom untergeordneten CA-Zertifikat.
Tatsächlich sind beide Befehle gleich. Im ersten Beispiel erhält der Client das untergeordnete CA-Zertifikat sowohl von der Kommandozeile als auch vom Server.
Beachten Sie, dass der Server das Stammzertifikat nicht senden muss, da dieses bereits auf Ihrem Client installiert und vertrauenswürdig sein muss.