SICHERE Authentifizierung mit OpenLDAP, PAM, NSS

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Mebuh
Beiträge: 122
Registriert: 21.06.2004 15:27:19
Wohnort: München

SICHERE Authentifizierung mit OpenLDAP, PAM, NSS

Beitrag von Mebuh » 27.06.2007 13:27:26

Hi,

Ich habe mir vor einer Weile einen OpenLDAP-Server nach dem bekannten HOWTO (http://www.hopto.org/<etc.>) eingerichtet (mit smbldap-tools und PAM-Authentifizierung über libpam-ldap).

Nennt mich paranoid, aber ohne SSL/TLS finde ich das ganze etwas unsicher, schließlich gehen dabei ja die User-Passwörter übers Netzwerk (zwar gehasht, aber trotzdem).

Jetzt wollte ich mich daran machen, den LDAP-Server und die Client-Libraries auf SSL oder TLS umzustellen. ich komme aber nicht recht weiter.

Hat einer von euch das hingekriegt? Falls ja, könnt ihr mir die relevanten Konfig-Stellen schicken/posten?

Die Zertifikate hab' ich mir erzeugt (für Server und Clients) und die (so glaube ich relevanten Optionen in der slapd.conf gesetzt:

Code: Alles auswählen

TLSVerifyClient demand
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCACertificateFile /etc/ssl/ca_cert.pem
TLSCertificateKeyFile /etc/ssl/ldap/server_key.pem
TLSCertificateFile /etc/ssl/ldap/server_cert.pem
Allerdings glaube ich, dass die Konfigs von libpam-ldap und libnss-ldap Probleme machen.
In den meisten Tutorials wird für SSL/TLS nur etwas in die /etc/ldap/ldap.conf eingetragen. Die gibt irgendwie globale Einstellungen für das System vor, oder? Ich weiß aber nicht, ob oben genannte Bibliotheken auch darauf zugreifen.

Kann mich mal jemand erleuchten, oder mir zumindest den Pfad zur Erleuchtung zeigen in Form von Howtos, Tutorials oder Ähnlichem?
Oder gibt es vielleicht einen besseren/sichereren Weg das gewünschte Ergebnis zu erziehlen (PAM an sich soll angeblich nicht so gut sein). In dem Kontext hab' ich mal Kerberos gehört (aber ist das nicht kompliziert?).

Thx,
Mebuh

Pawel
Beiträge: 284
Registriert: 27.11.2006 03:59:39

Beitrag von Pawel » 27.06.2007 15:16:36

Mebuh hat geschrieben:Jetzt wollte ich mich daran machen, den LDAP-Server und die Client-Libraries auf SSL oder TLS umzustellen. ich komme aber nicht recht weiter.
Log- und Fehlermeldungen wären hier hilfreich.
Mebuh hat geschrieben:Hat einer von euch das hingekriegt? Falls ja, könnt ihr mir die relevanten Konfig-Stellen schicken/posten?
Bei mir läuft das einwandfrei, allerdings ohne Client Authentifizierung. Theoretisch müssen nur die Parameter TLS_CERT und TLS_KEY mit dem Pfad für das Zertifikate des Clients beim Client hinzugefügt werden.

/etc/ldap/ldap.conf:

Code: Alles auswählen

URI     ldaps://{Domainname, wie im Zertifikat für den Server angegeben}

TLS_CACERT /etc/ssl/certs/cacert.pem
TLS_REQCERT demand
/etc/libnss-ldap.conf und /etc/pam_ldap.conf müssen zwar nicht konfiguriert werden, können aber (ganz am Ende der Datei stehen folgende Abschnitte):

Code: Alles auswählen

# OpenLDAP SSL options
# Require and verify server certificate (yes/no)
# Default is to use libldap's default behavior, which can be configured in
# /etc/openldap/ldap.conf using the TLS_REQCERT setting.  The default for
# OpenLDAP 2.0 and earlier is "no", for 2.1 and later is "yes".
tls_checkpeer yes

# CA certificates for server certificate verification
# At least one of these are required if tls_checkpeer is "yes"
tls_cacertfile /etc/ssl/certs/cacert.pem

# Client certificate and key
# Use these, if your server requires client authentication.
#tls_cert
#tls_key

Mebuh
Beiträge: 122
Registriert: 21.06.2004 15:27:19
Wohnort: München

Beitrag von Mebuh » 28.06.2007 13:04:31

Danke,

dass hat funktioniert :-)

die URI des Servers wird wohl nicht aus /etc/ldap/ldap.conf übernommen (zumindest hat er ohne in pam_ldap.conf gemeckert)
aber bei den tls_* Optionen reicht es, wenn sie in der ldap.conf sind.b

Das mit der Clientauthentifizierung probier ich heute Nachmittag noch aus (sollte nicht mehr das große Problem sein).
Werd es dann hier posten, wenn es läuft.

CU,
Mebuh

Mebuh
Beiträge: 122
Registriert: 21.06.2004 15:27:19
Wohnort: München

Beitrag von Mebuh » 29.06.2007 21:28:46

OK, das war etwas voreilig :-(

es scheint nur mit ssh auf dem Server zu funktionieren.

Der Server und der Client kriegen sonst keine SSL Verbindung zustande!
Wireshark zeigt mir, dass sie bis zu "Encrypted Handshake Message" und dann kommt von beiden ein "Encryption Alert" und die Verbindung wird beendet!

Irgendeine Idee?

Gruß,
Mebuh

Pawel
Beiträge: 284
Registriert: 27.11.2006 03:59:39

Beitrag von Pawel » 30.06.2007 00:59:19

Mebuh hat geschrieben:Irgendeine Idee?
Ich vermute, dass du keinen Fehler bei der Erstellung der Client Zertifikate gemacht hast und es nur an einer Kleinigkeit scheitert. Am meisten half mir bei der Einrichtung von LDAP mit SSL die /var/log/auth.log anzuschauen. Dort war immer eine Fehlermeldung zu finden (auf seiten des Clients).

Mebuh
Beiträge: 122
Registriert: 21.06.2004 15:27:19
Wohnort: München

Beitrag von Mebuh » 30.06.2007 09:59:21

Das stimmt schon, aber in /var/log/auth.log bekomme ich nur die folgende Meldung:

Code: Alles auswählen

Jun 30 09:51:08 snoopy sshd[18391]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=client  user=mebuh
Jun 30 09:51:09 snoopy sshd[18391]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Jun 30 09:51:11 snoopy sshd[18372]: error: PAM: Authentication failure for mebuh from client
Jun 30 09:51:11 snoopy sshd[18372]: Failed keyboard-interactive/pam for mebuh from 192.168.1.2 port 1158 ssh2
Die hilft mir nicht besonders weiter :-(
und Debugmeldungen kann ich bei libpam_ldap anscheinend nicht aktivieren.

Wenn ich mich mit openssl s_client verbinde funktioniert es.
Und umgekehrt mit openssl s_server auch.

Gruß,
Mebuh

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 30.06.2007 10:46:20

Hi,

Hast du mal den slapd im debug-modus gestartet ? Lauscht er auf dem richtigen Port ?
Gruss,
mauser

Mebuh
Beiträge: 122
Registriert: 21.06.2004 15:27:19
Wohnort: München

Beitrag von Mebuh » 05.07.2007 13:41:06

Zwischenbilanz:

ich habe inzwischen herausgefunden, dass es wohl etwas mit der Verifizierung der Zertifikate zu tun hat.
Leider weiß ich nicht was!

Fest steht, bei Programmen, die im Hintergrund Anfragen stellen funktioniert es nicht. Wenn ich mir die Kommunikation mit Wireshark anschaue, sendet der Client am Ende des SSL-Handshake ein TCP-FIN ( an der Stelle wo er eigentlich seine erste verschlüsselte Anfrage schicken sollte.

Wenn ich das ganze mit einem LDAP-Browser mache, fragt mich der, ob ich das Zertifikat akzeptiere und danach funktioniert die SSL-Verbindung.

Wenn ich mit "openssl s_client -connect server:636 -showcerts -state -CAfile ca_cert.pem" Versuche mich zu verbinden, bekomme ich am schluss ein OK.

Mein Problem ist vor allem, dass ich keine guten Logs von den beteiligten Programmen bekomme.
slapd liefert mir keine SSL-Infos ( oder hab' ich nur nicht das richige log-level gesetzt?)
libpam-ldap sowieso nicht.
kaddressbook (hab' auch mein E-Mail verzeichnis drauf) liefert mir zumindest ein "error in certificate" (was mich aber auch verwundert.

Gruß,
Mebuh

duser100
Beiträge: 19
Registriert: 20.06.2007 14:21:28

Beitrag von duser100 » 27.07.2007 10:34:17

Hier klappt das mit SSL (aber immer noch nicht das Passwort ändert als User von ´nem Client aus - also nicht am Server selbst per 'passwd')

ldap.conf:

Code: Alles auswählen

TLS_CACERT /etc/ssl/ldap/ca.crt
TLS_CERT /etc/ssl/ldap/client-crt.crt
TLS_KEY /etc/ssl/ldap/client-key.key
TLS_REQCERT  demand
ca.crt muss natürlich das sein welches vom CA ist der auch das Zertifikat vom LDAP-Server signiert hat.


libnss-ldap.conf bzw. auch pam_ldap.conf:

Code: Alles auswählen

uri ldaps://irgendeiner.irgendwo.irgendwas/
Wenn da zu viel im libnss-ldap.conf bzw. pam_ldap.conf drin stand (zum Beispiel nochmal die Zertifikate und so angegeben) hat´s so weit ich mich erinnere nicht geklappt. Auf den CentOS-Kisten hat´s mit SSL nicht so schön geklappt - allerdings ließ es sich TLS dann einreden.


und am Server im /etc/default/slapd:
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps://127.0.0.1:636/ ldap://irgendeiner.irgendwo.irgendwas:389/ ldaps://irgendeiner.irgendwo.irgendwas:636/"

Die Zertifikate haben Anfangs etwas rumgezickt... hatte da so ein easy-rsa vom openvpn verwendet. Ich glaub aber da war ein falscher/anderer Verwendungszweck eingestellt. Dann nochmal neu gemacht und dann hat´s geklappt (auch verschlüsselte Replikation)

Antworten