Konfigurieren Sie OpenLDAP mit TLS = erforderlich

16

Heutzutage muss OpenLDAP mit ldapmodify cn = config konfiguriert werden, wie hier beschrieben . Aber nirgendwo kann ich herausfinden, wie Sie es so konfigurieren, dass es nur TLS-Verkehr akzeptiert. Ich habe gerade bestätigt, dass unser Server unverschlüsselten Datenverkehr akzeptiert (mit ldapsearch und tcpdump).

Normalerweise würde ich nur den Nicht-SSL-Port mit IP-Tabellen schließen, aber die Verwendung des SSL-Ports ist anscheinend veraltet, sodass ich diese Option nicht habe.

Also, mit den SSL-Konfigurationsbefehlen, wie folgt:

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

Gibt es einen Parameter zum Erzwingen von TLS?

Edit: Ich habe die olcTLSCipherSuite ausprobiert, aber sie funktioniert nicht. Debug-Ausgabe:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2 (fast behoben): Ich konnte es durch Laden beheben:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Aber dann Befehle wie

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

Funktioniere nicht mehr ... und ändere es in:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

gibt mir "ldap_bind: Ungültige Anmeldeinformationen (49)". Obwohl dieses binddn als rootdn angegeben ist, kann ich es anscheinend nicht zum Ändern verwenden cn=config. Kann das geändert werden?

Halfgaar
quelle

Antworten:

16

Ich schien es verstanden zu haben:

Ich war das:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Und das scheint den gewünschten Effekt zu haben. Ich kann immer noch Befehle ausführen wie:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

Der Versuch, mit " ldapsearch -xLLL -b ..." ohne SSL zu binden, sagt jedoch: "TLS-Vertraulichkeit erforderlich".

Halfgaar
quelle
2
+1 scheint es großartig zu funktionieren. Wenn der Client versucht, sich ohne STARTTLS zu authentifizieren, sendet er das Kennwort leider im Klartext und der Server antwortet dann mit der TLS confidentiality requiredNachricht.
Carlos Campderrós
1
Ich habe das auf der OpenLDAP-Mailingliste als mögliches Sicherheitsproblem gepostet. Ich habe das Beispiel von FTP angegeben, das blockiert, sobald Sie USER angeben. Aber ich wurde überstimmt. Sieh dir das an.
Halfgaar
lustig, ich habe mir diesen Thread angesehen, bevor ich diese Antwort gefunden habe :)
Carlos Campderrós
Danke, genau das, wonach ich gesucht habe. Das im Klartext übermittelte Kennwort ist für die clientseitige Software implementierungsspezifisch. Die TLS-Anforderung kann zuerst mit anonymer Bindung getestet werden, bevor versucht wird, sie als Benutzer zu binden.
Server Fehler
3

Dies wird mit der Option TLSCipherSuite erreicht . Ein Beispiel ist im Kapitel LDAP-Sicherheit des OpenLDAP Zytrax-Buches dokumentiert . Damit können Sie OpenLDAP mitteilen, welche Chiffresuiten Ihr Server akzeptiert. Zum Beispiel können Sie sagen, dass Sie keine NULLChiffresuite möchten (dh: nicht verschlüsselte Sitzung).

Beachten Sie jedoch, dass OpenLDAP mit OpenSSL- oder GnuTLS-Bibliotheken verknüpft werden kann. Diese verwenden unterschiedliche Verschlüsselungslisten, um ihre Verschlüsselungsunterstützung zu beschreiben. Die OpenSSL-Verschlüsselungsliste kann mit einem Befehl wie openssl ciphers -vund die GnuTLS-Liste mit abgerufen werden gnutls-cli -l.

Die einfachste Möglichkeit, die Verbindung ohne Verschlüsselung zu deaktivieren, ist dann:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

Eine spezifischere Einschränkung bei Verwendung der GnuTLS-Syntax :

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

Ein vollständigeres Beispiel könnte (unter Verwendung der OpenSSL-Syntax ) sein:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

Zu einer ähnlichen Frage gibt es eine OpenLDAP-Mailinglisten-Diskussion, die es wert ist, gelesen zu werden .

Beachten Sie auch, dass die OpenLDAP-CLI-Tools ldapsearchautomatisch auf TLS umstellen, wenn Sie eine Verbindung zu einem Server herstellen, der die unverschlüsselten Verbindungen verbietet. Das bedeutet, dass Sie der Argumentliste nichts hinzufügen müssen -Z.

Tonin
quelle
Ich versuchte es. Es hat nicht funktioniert. Ich habe meine Frage bearbeitet, um sie zu reflektieren.
Halfgaar
Ich denke, der Fehler, den Sie melden, hängt mit den Chiffren zusammen, die Ihrer TLS-Implementierung bekannt sind. OpenLDAP kann mit OpenSSL- oder gnuTLS-Bibliotheken kompiliert werden. In dem von mir angegebenen Beispiel wurde die OpenSSL-Syntax verwendet. Ihre Implementierung verwendet wahrscheinlich gnuTLS. Ich würde vorschlagen, dass Sie zum Beispiel eine vereinfachte CipherSuite ausprobierenALL:!NULL
Tonin
"WARNUNG: Seien Sie nicht clever und ändern Sie die TLSCipherSuite in etwas Cleveres wie HIGH: MEDIUM: -SSLv2 - dies ist eine openssl-Direktive" - ​​lesen Sie rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
2.