Bundesamt für Sicherheit in der Informationstechnik

M 5.170 Sichere Kommunikationsverbindungen beim Einsatz von OpenLDAP

Verantwortlich für Initiierung: IT-Sicherheitsbeauftragter, Leiter IT

Verantwortlich für Umsetzung: Administrator

Die Kommunikation zwischen einem slapd-Server und seinen Kommunikationspartnern sollte verschlüsselt werden, um die ausgetauschten Informationen vor Kenntnisnahme oder Veränderung durch unberechtigte Personen zu schützen. Hierbei können die Kommunikationspartner Clients und andere Server sein, beispielsweise im Rahmen von Partitionierung und Replikation.

StartTLS und ldaps://

Um OpenLDAP mittels TLS / SSL abzusichern, sind vorrangig StartTLS und ldaps:// zu verwenden (siehe M 5.66 Clientseitige Verwendung von SSL/TLS ):

  • StartTLS ist eine in RFC 2830 definierte LDAP "extended operation", die in LDAPv3 als Standardmechanismus verwendet wird, um die Übertragungssicherheit zu gewährleisten. Eine TLS-gesicherte Übertragung wird auf einer bereits bestehenden LDAP-Verbindung aufgebaut, die gesamte Kommunikation läuft über Port 389.
  • Bei ldaps:// hingegen wird bereits der Verbindungsaufbau verschlüsselt vorgenommen. Der slapd-Server muss dafür an einem zusätzlichen Port auf Verbindungen warten, üblicherweise wird der Port 636 verwendet.

Obwohl OpenLDAP beide Verbindungsvarianten unterstützt, wird empfohlen, StartTLS einzusetzen. Vorteile von StartTLS sind die Standard-Konformität und die Vermeidung eines weiteren geöffneten Ports/Dienstes an einer zentralen Netzkomponente. Es ist jedoch möglich, dass ein Kommunikationspartner StartTLS nicht unterstützt. Ferner sind Fälle bekannt, in denen LDAP-Clients vertrauliche Informationen insbesondere zur Authentisierung über eine LDAP-Verbindung ausgetauscht haben, bevor die Verarbeitung von StartTLS abgeschlossen war. Die Übertragung erfolgte zum Teil ungesichert. In diesen Fällen ist es sinnvoll, ldaps:// zu verwenden. SSLv2 sollte weder für StartTLS noch für ldaps:// verwendet werden.

Konfiguration mit Zertifikaten

Für die verschlüsselte Kommunikation muss ein Server-Zertifikat vorliegen, das als Distinguished Name (DN) des Zertifikats den vollständig angegebenen Rechnernamen des Servers beinhaltet. Soll die Kommunikation auch die zertifikatsbasierte Identitätsfeststellung des Benutzers umfassen, benötigt der Benutzer ebenfalls ein X.509-Zertifikat. Falls die DN-Einträge im Zertifikat eines Benutzers und in seinem Eintrag im Verzeichnis nicht übereinstimmen, ist eine Zuordnung (Mapping) durchzuführen.

Die Konfiguration für verschlüsselte Verbindungen ist sowohl auf dem Server, als auch auf dem Client vorzunehmen. Für den slapd-Server sind die Einstellungen in den globalen Direktiven der Konfigurationsdatei "slapd.conf" vorzunehmen, für die ldap*-Werkzeuge von OpenLDAP in der lokalen ldap.conf. Die Einstellungen der ldap.conf können durch die benutzerspezifische Konfigurationsdatei .ldaprc überschrieben werden, Benutzer-Zertifikate sind dort in jedem Fall einzutragen. Für andere Werkzeuge und Clients ist die jeweilige Dokumentation zu konsultieren.

Es sind unter anderem folgende Parameter zu setzen:

TLSCACertificateFile (Server) bzw. TLS_CACERT (Client oder Benutzer)

Der Eintrag verweist auf die Datei, die den öffentlichen Schlüssel beziehungsweise das Wurzelzertifikat einer vertrauenswürdigen Zertifizierungsstelle beinhaltet. Es können mehrere Dateien angegeben werden.

TLSCACertificatePath (Server) bzw. TLS_CACERTDIR (Client oder Benutzer)

Statt der Dateien im vorgenannten Parameter können ein oder mehrere Pfade beschrieben werden, in denen die Dateien zu finden sind.

TLSCertificateFile (Server) bzw. TLS_CERT (Benutzer, nicht Client)

Der Parameter bezeichnet die Datei, die das eigene Zertifikat beziehungsweise den öffentlichen Schlüssel beinhaltet.

TLSCertificateKeyFile (Server) bzw. TLS_KEY (Benutzer, nicht Client)

Dieser Parameter verweist auf den geheimen Schlüssel, der in jedem Fall zu schützen ist. Die Zugriffsrechte für die Datei müssen sorgsam gesetzt werden, damit nur der jeweilige Benutzer (oder der Benutzer, mit dessen Rechten der slapd-Server betrieben wird) auf die Datei zugreifen kann.

TLSCipherSuite (nur Server)

Der Eintrag listet die zulässigen Verschlüsselungsverfahren in der bevorzugten Reihenfolge auf und ist abhängig von der verwendeten SSL/TLS Implementierung. Je weniger und je stärkere Verschlüsselungsverfahren angegeben werden, desto besser, so sollte SSLv2 vermieden werden. Keinesfalls darf hier der Eintrag "NULL" (keine Verschlüsselung) stehen.

TLSRandFile (Server) bzw. TLS_RANDFILE (Client oder Benutzer)

Die Angabe bezeichnet die Quelle für Zufallswerte. Die Datei liefert den Ausgangswert (Seed), auf dessen Grundlage mit mathematischen Funktionen ausreichend zufällige Zahlenwerte als Sitzungsschlüssel erzeugt werden. Die Angabe wird auf den meisten Linux- und Unix-Systemen nicht benötigt, da /dev/urandom für diesen Zweck verfügbar ist.

TLSVerifyClient (Server) bzw. TLS_REQCERT (Client oder Benutzer)

Dieser Parameter bestimmt, inwieweit Zertifikate der jeweiligen Gegenseite geprüft werden. Mögliche Werte sind:

  • never: Das Zertifikat der Gegenseite wird nie geprüft (Voreinstellung für Server, diese identifizieren keine Clients). Dieser Wert darf nicht gesetzt werden, falls SASL eingesetzt wird und SASL wiederum TLS/SSL zur Authentisierung verwenden soll. Dann muss das Zertifikat des Clients oder Benutzers geprüft werden, da er darüber authentisiert wird.
  • allow: Ein Zertifikat wird angefragt, aber wenn dieses nicht geliefert wird oder die Überprüfung fehlschlägt, hat dies keine Auswirkungen.
  • try: Ein Zertifikat wird angefragt. Wird keines geliefert, hat dies keine Auswirkungen. Wird ein Zertifikat geliefert und dessen Überprüfung schlägt fehl, wird die Sitzung abgebrochen.
  • demand: Ein Zertifikat muss geliefert und erfolgreich geprüft werden, andernfalls wird die Sitzung abgebrochen (Voreinstellung für Clients, diese müssen sich über die Identität des Servers vergewissern)

Aufbau einer gesicherten Verbindung

Für StartTLS unterstützen alle ldap*-Werkzeuge von OpenLDAP die Flags "-Z" und "-ZZ". "Z" bedeutet, dass eine verschlüsselte Verbindung versucht und bei Erfolg genutzt werden soll. "ZZ" hingegen bedeutet, dass die Verschlüsselung erfolgreich durchgeführt werden muss, bevor das Kommando ausgeführt werden darf. Für andere Clients, die einen slapd-Server kontaktieren, ist die jeweilige Dokumentation zu beachten.

ldaps:// wird in der Regel durch die entsprechende Zieladresse mit ldaps://... statt ldap://... gestartet, alternativ durch einen generellen Eintrag in der URI Direktive der clientspezifischen Konfigurationsdatei "ldap.conf".

Wenn Overlays verwendet werden, ist zu berücksichtigen, dass diese teilweise eigene Sub-Direktiven für TLS/SSL anbieten, wenn sie zu einem Datenaustausch zwischen Servern führen. Das gilt unter anderem für die Overlays "syncprov" und "chain".

Einschränkung des Netzverkehrs

Um die Kommunikation weiter abzusichern, bietet OpenLDAP die Funktion "selective listening" und die Einbindung der Systemapplikation TCP Wrapper an. "Selective listening" beschränkt die Annahme von Operationen auf bestimmte Absender-IP-Adressen. TCP Wrappers stellt eine regelbasierte Überwachung der TCP/IP-Kommunikation bereit. Es wird empfohlen, auf "selective listening" und TCP Wrapper zu verzichten. Vielmehr ist darauf zu achten, dass der Server bereits auf Betriebssystemebene adäquat geschützt ist (siehe M 4.238 Einsatz eines lokalen Paketfilters ). Eine zusätzliche Überwachung des Netzverkehrs durch OpenLDAP führt zu einem unnötigen Administrationsaufwand und letztlich dazu, dass OpenLDAP eine Funktion übernimmt, für die die Anwendung nicht konzipiert wurde.

Abweichende Ports

Gelegentlich wird empfohlen, Verzeichnisdienste so zu konfigurieren, dass diese andere Ports als 389 beziehungsweise 636 verwenden. Dies soll direkte Angriffe auf bekannt gewordene Schwächen einer LDAP-Version erschweren. Von dieser Empfehlung wird abgeraten, da ein minimaler Sicherheitsgewinn mit einem umfangreichen und deshalb fehlerträchtigen Administrationsaufwand erkauft wird. Unter Umständen kommt es auch zu Funktionseinschränkungen bei nicht hinreichend konfigurierbaren Clients.

Prüffragen:

  • Wird die Kommunikation zwischen slapd-Server und seinen Kommunikationspartnern verschlüsselt?

  • Wird SSLv2 weder für StartTLS noch für ldaps:// verwendet?

Stand: 13. EL Stand 2013