Einige Systeme können über ldaps keine Verbindung zu ldap herstellen, andere dagegen, ist es das Wildcard-Zertifikat?

15

Beim Versuch, ldaps-Verbindungen zu meinem Novel eDirectory 8.8-Server herzustellen, muss ich manchmal die TLS_REQCERT neverDatei ldap.conf des Client-Servers eingeben. Offensichtlich ist das eine schlechte Idee.

Der Befehl, den ich ausführe, ist ungefähr so, mit Anmeldeinformationen, die tatsächlich funktionieren ...

ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"

Unter Ubuntu 13.10 funktioniert es einwandfrei.

Auf SLES funktioniert es gut.

Unter CentOS 6.5 gibt es Folgendes zurück:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Nun ist das von mir importierte Zertifikat ein Wildcard-Zertifikat, das von DigiCert gekauft wurde. Mein Kollege hat einige Berichte gefunden, die darauf hinweisen, dass einige Systeme Probleme mit Platzhaltern haben.

Also, ist die Wildcard-Zertifizierung schuld? Wenn ja, wie behebe ich das?

Wenn es nicht das Wildcard-Zertifikat ist, was ist es dann?

Auf Anregung von Andrew Schulman habe ich -d1meinen Befehl ldapsearch erweitert. Hier ist, was ich am Ende hatte:

ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password: 
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Nach alledem vertraut CentOS DigiCert nicht? Oder hat CentOS keine Liste vertrauenswürdiger Emittenten?

David R.
quelle
1
"LDAP-Server kann nicht kontaktiert werden" klingt eher so, als wäre der Server von diesem Client-Computer aus nicht erreichbar. Haben Sie zuerst überprüft, ob Sie tatsächlich eine Verbindung herstellen können? ZB telnet ldapserver ldapsoder openssl s_client -connect ldapserver:636.
Richard E. Silverman
Ja, ich habe bestätigt, dass eine Verbindung zum Server hergestellt werden kann. Immerhin würde es nie funktionieren, wenn es überhaupt keine Verbindung herstellen könnte.
David R.
Sie haben drei verschiedene Client-Hosts erwähnt. Derjenige, der nicht funktioniert, konnte möglicherweise aufgrund eines Netzwerkproblems keine Verbindung herstellen, während die anderen dies konnten.
Richard E. Silverman
Ich dachte, mein Post war ziemlich klar, dass ich die ldap.conf-Datei auf allen Hosts bearbeitete. Wie beim Hinzufügen der Zeile zur Datei hat es funktioniert, aber ohne die Zeile nicht. Somit kein Verbindungsproblem.
David R.
Das war mir nicht klar, als ich Ihren Beitrag anfangs las, obwohl ich verstehe, was Sie jetzt meinen. Wie auch immer, die von Ihnen hinzugefügten TLS-Debugging-Informationen zeigen das Problem. Ich habe eine Antwort hinzugefügt, die ich verfolgen möchte.
Richard E. Silverman

Antworten:

9

ldapsearch sucht in / etc / openldap / cacerts nach dem Speicher für vertrauenswürdige CA-Zertifikate, der anscheinend nicht eingerichtet ist, und lehnt das Zertifikat daher ab, da keine Vertrauenskette für das Zertifikat erstellt werden kann. Wenn ldapsearch OpenSSL verwenden würde, würde es eine "hashdir" -Formatsammlung benötigen, wie sie beispielsweise vom Red Hat "authconfig" -Programm erstellt wird, oder eine einzelne Datei mit einer einfachen Liste vertrauenswürdiger Zertifikate. Der Verweis auf "moznss" deutet darauf hin, dass diese ldapsearch auf Mozilla NSS basiert. In diesem Fall müssen Sie "certutil" verwenden, um die cert db zu erstellen (oder, falls vorhanden, auf den System-NSS-Zertifikatspeicher verweisen). .

Auf den Systemen, auf denen es funktioniert, muss ldapsearch über einen funktionierenden Zertifikatspeicher verfügen, möglicherweise, weil diese OpenLDAP-Pakete stattdessen für OpenSSL erstellt wurden (oder möglicherweise ist dort ein funktionsfähiger Speicher im NSS-Stil verfügbar).

Richard E. Silverman
quelle
2
Ah. /etc/openldap/certsist, wo der Zertifizierungsspeicher ist. Keine Cacerts. In /etc/openldap/ldap.conf änderte ich TLS_CACERTDIR /etc/openldap/cacertszu TLS_CACERTDIR /etc/openldap/certsund mein ldapsearch Befehl fing an zu arbeiten. Vielen Dank!
David R.
Ich habe ldapsearch unter Ubuntu 16.04 installiert und es gibt kein / etc / openldap-Verzeichnis.
Vcardillo
13

ldapsearch sagt "LDAP-Server kann nicht kontaktiert werden", wenn das TLS-Zertifikat nicht verifiziert werden kann. Fügen -d1Sie den Befehl ldapsearch hinzu und überprüfen Sie die Ausgabezeilen, die mit "TLS:" beginnen, um weitere Informationen darüber zu erhalten, ob und warum die TLS-Verbindung fehlschlägt.

Andrew Schulman
quelle
Ich habe meine Frage auf Ihren Vorschlag hin bearbeitet. Vielen Dank!
David R.
8

Die Lösung hängt von Ihrer Installation ab:

  • Wenn Sie ein ungültiges Zertifikat verwenden , können Sie die Konfiguration /etc/openldap/ldap.confmit erzwingen

    TLS_REQCERT allow
    

    oder

    TLS_REQCERT never
    
  • Wenn Sie ein gültiges Zertifikat verwenden, weiß Ihre ldap- Installation wahrscheinlich nicht, wo sich der Speicher vertrauenswürdiger CA-Zertifikate befindet (wahrscheinlich abhängig von Ihrer OpenSSL-Installation). Anschließend können Sie versuchen, den Speicherort festzulegen, und die Konfiguration /etc/openldap/ldap.confmit erzwingen

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    

    /etc/openldap/cacertkann dies sein oder sich in einem beliebigen Pfad befinden. Es muss die Zertifikatskette Ihrer Zertifizierungsstelle enthalten. Es kann sich um eine einzelne Datei mit einer einfachen Liste vertrauenswürdiger Zertifikate handeln.

Hinweispfade hängen vom LDAP-Anbieter ab. Es könnte sein , /etc/ldapoder /etc/openldapso.

Juan Garcia
quelle