OpenLDAP – TLS serverseitig erzwingen

Vor ein paar Tagen machte mich ein interessierter Blog-Leser auf folgende Punkt im Zusammenhang mit meinen früheren LDAP-Artikeln aufmerksam:

Ich habe in meinen Blog-Beiträgen zwar beschrieben, wie man unter Opensuse die TLS-Fähigkeit des Servers herstellt. Aber die Konfiguration mit YaST schließt eine Authentifizierung ohne TLS-Verbindung keineswegs aus. Nun gibt es aber Situationen, in denen man einen Simple Bind und den nachfolgenden Datenaustausch nicht ohne hinreichende Verschlüsselung zulassen will.

Eine Variante, wie man das im eigenen Netzwerk erreichen kann, ist sicher die, alle Clients entsprechend zu konfigurieren. Das wird angesichts der Vielzahl an Tools, die ihre eigenen Wege gehen, aber zur echten Qual. Deshalb ist es eher sinnvoll, eine serverbasierte Einstellung zu finden, die eine TLS/SSL-Verschlüsselung erzwingt.

Hierzu gibt es die Option:

olcSecurity: tls=1

Zu den möglichen Angaben nach "olcSecurity: " sage ich weiter unten noch etwas mehr. Siehe aber auch:
http://gsp.com/cgi-bin/man.cgi?section=5&topic=slapd-config

Die Option "olcSecurity" sollte man in einer modernen LDAP-Installation mit modularer, LDIF-artiger Konfiguration natürlich durch Ausführung einer LDIF-Datei in seine LDAP-Konfigurationseinstellungen einfügen. Beispieldatei:

Datei "erzwinge_tls.ldif"

dn: cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1

Hinweis:
Bevor man diese Datei tatsächlich zur Anwendung bringt, muss man natürlich dafür sorgen, dass man mindestens einen Client bereits erfolgreich für einen TLS-Zugriff konfiguriert hat. Das sollte man unbedingt vorab testen; nach Setzen des olcSecurity-Parameters geht sonst bzgl. des LDAP-Zugriffs nämlich nichts mehr - zumindest nicht ohne größere Klimmzüge.

Die Datei bringt man dann wie gewohnt zur Ausführung - z.B. :

ldapmodify -D "cn=Administrator,dc=anraconx,dc=de" -w ADMINS_LDAP_PASSWD -x -a -f erzwinge_tls.ldif

Siehe auch: http://www.linuxlasse.net/linux/howtos/OpenLDAP_Server,_authenticate_linux_users

Danach kann man eine Reihe von unterschiedlichen Zugriffstests durchführen. Sehr ausführlich und interessant ist das z.B. hier beschrieben:
http://www.openldap.org/lists/openldap-technical/201007/msg00241.html
http://lists.arthurdejong.org/openldap-technical/2012/09/msg00139.html

Typisch ist folgende Serverreaktion:

ldap_bind: Confidentiality required (13)
     additional info: TLS confidentiality required

Insgesamt ist danach ein Zugriff nicht mehr ohne STARTTLS oder "ldaps" als Protokoll möglich.

Bei Benutzung von LDAP-CLI-Kommandos ist dann - falls nicht in Konfigurationsdateien bereits explizit "ldaps" als Protokoll vorgegeben wurde - die Verwendung der Optionen "-Z" oder "-ZZ" oder gar "-ZZZ" erforderlich. Siehe zu den Optionen
https://access.redhat.com/site/documentation/en-US/Red_Hat_Directory_Server/8.1/html/Configuration_and_Command_Reference/Configuration_Command_File_Reference-Command_Line_Utilities-ldapmodify.html
Dies gilt auch bei Einsatz des Protokolls "ldapi" - wie z.B. in folgenden Beispielen

ldapmodify -Y EXTERNAL -H ldapi:// -Z -f Beispiel.ldif
oder
ldapmodify -D "cn=Administrator,dc=anraconx,dc=de" -w ADMINS_LDAP_PASSWD -x -a -ZZ -f BEISPIEL.ldif

Andere LDAP-Zugriffs-Tools wie "gq" oder der LDAP-Browser aus dem "Apache Directory Studio" wie auch Opensuse's YaST2-Browser müssen natürlich auch auf STARTTLS oder den Einsatz von "ldaps" (Port 636) umgestellt werden.

Die Angabe "olcSecurity: tls=1" sichert strukturell nur ab, dass überhaupt mit TLS/SSL verschlüsselt wird. Durch Angabe von Faktoren wie

olcSecurity: minssf=128

oder

olcSecurity: tls=128

kann man zudem die erforderliche Mindest-Verschlüsselungsstärke steuern.

Siehe für Details hierzu:
http://itsecureadmin.com/tag/openldap/
http://man7.org/linux/man-pages/man5/slapd-config.5.html
http://www.zytrax.com/books/ldap/ch6/#security

Viel Spaß nun mit mit dem per TLS abgeschotteten LDAP-Server. Vergesst nicht, euren Anwendern mitzuteilen, dass Sie danach auf STARTTLS-Verfahren umsteigen müssen.