Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
php, python und ldap-clients mit tls zum ldapserver
neu openldap-2.4
es gibt einige änderungen bei den tools, u.a. die zert-verwaltung, wird jetzt mit certutil gemacht.
hinzufügen einer ca zu den vertrauenswürdigen ca's
wie gehabt gibt es eine /etc/openldap/ldap.conf, da wird das verzeichnis für die CA's konfiguriert:
TLS_CACERTDIR /etc/openldap/certs
dort liegen einige db's, den Inhalt des keystores kann man sich anzeigen lassen:
certutil -d /etc/openldap/certs -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI
hinzufügen einer neuen CA4 zu den CA's:
certutil -A -d /etc/openldap/certs -n "CA4" -t CT,, -i /root/cacert.pem
gucken ob das neue ca installiert wurde:
certutil -d /etc/openldap/certs -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI CA4 CT,,
jetzt klappt die Verbindung mit ldapsearch und TLS:
ldapsearch -D "cn=directory manager" -W -x -Z -h irgendeinldapserver.fh-schmalkalden.de
konfiguration redhat linux
ohne Zertprüfung:
folgende option zum configfile /etc/openldap/ldap.conf hinzufügen:
TLS_REQCERT never
debug probleme bei php:
php-option für ldap, die ich vor das erste ldap-connect eingefügt habe:
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
in der logdatei vom webserver findet sich dann folgendes (wenn TLS_REQCERT noch nicht auf 'never' steht):
TLS trace: SSL_connect:before/connect initialization TLS trace: SSL_connect:SSLv2/v3 write client hello A TLS trace: SSL_connect:SSLv3 read server hello A TLS certificate verification: depth: 0, err: 20, subject: /C=DE/ST=Thuringia/L=Schmalkalden/O=FH Schmalkalden/OU=IuK- Zentrum/CN=postfix.fh-schmalkalden.de, issuer: /C=DE/ST=Thuringia/L=Schmalkalden/O=Fachhochschule Schmalkalden/OU=IuK-Zentrum/CN=CA2 FH Schmalkalden/emailAddress=ca@fh- schmalkalden.de TLS certificate verification: Error, unable to get local issuer certificate
Schalter Z für TLS!
Installation Wurzelzertifikat
Prüfe die folgenden Einstellungen in /etc/openldap/ldap.conf
# Legt das Verzeichnis fest, indenen nach CA Zertifikaten gesucht wird TLS_CACERTDIR /etc/openldap/cacerts # Legt fest, das ohne ein Zertifikat, oder bei falschem Zertifkat die Verbindung abgebrochen wird TLS_REQCERT hard
Das iuk2ca.crt-Zertifikat muss nach /etc/openldap/cacerts/iukca2.crt kopiert werden. Mit
openssl x509 -subject_hash -noout -in iukca2.crt
wenn -subject_hash nicht unterstützt wird dann mit
openssl x509 -hash -noout -in iukca2.crt
wird der Subject-Hash angezeigt, z.B. 3e4202dc, mit
ln -s iukca2.crt 3e4202dc.0
wird ein entsprechender Symlink angelegt.
ACHTUNG: punkt-null nicht vergessen, der symlink lautet also <hash>.0 und nicht <hash>!
Nun kann man mit
openssl s_client -connect ldap.fh-schmalkalden.de:636 -CApath /etc/openldap/cacerts
prüfen, ob eine SSL-Verbindung hergestellt werden kann. Dann kann mit
ldapsearch -Z -H ldap://ldap.fh-schmalkalden.de -b "ou=students,dc=fh-sm,dc=de" -x "(uid=...)"
eine Abfrage erfolgen (natuerlich eine sinnvolle uid einsetzen).
erfolgeich, nachdem ich das „.0“ beim hash ergänzt habe.
15:07, 25. Okt 2007 (CEST)
aber python:
ldap.SERVER_DOWN: {'info': 'TLS: hostname does not match CN in peer certificate', 'desc': "Can't contact LDAP server"}
d.h. wir müssen mit dem namen connecten der im zert drinsteht, also in diesem fall mit postfix.fh-schmalkalden.de
>>> a=ldap.initialize('ldaps://postfix.fh-schmalkalden.de') >>> a.search('dc=fh-sm,dc=de',2,'cn=jens*') 1
Bingo!!
quellcode php
Bei php muß der apache neu gestartet werden. Die Paramater in /etc/openldap/ldap.conf werden wohl nur einmalig beim start des apache eingelesen.
<?php # zur fehlersuche: # ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); $ds=ldap_connect($ldaphost); # da ist so im ldap-connect, es wird immer true geliefert, auch wenn der # host nicht erreichbar ist, deshalb noch ein anonymer bind hinterher: $rr=ldap_bind($ds); # echo ldap_error($ds); # nur wenn bind oben erfolgreich (server ist erreichbar): if ($rr) { ## tls einschalten: if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) { error_log ("Failed to set LDAP Protocol version to 3, TLS not supported.",0); } if (!ldap_start_tls($ds)) { error_log ("Ldap_start_tls failed",0); } #echo ldap_error($ds); # mache irgendwas ...... # programmcode .... # bool ldap_unbind ( resource link_identifier ) if (!ldap_unbind($ds)) { echo "Verbindung zum LDAP Server konnte nicht getrennt werden"; } } else { echo "Verbindung zum LDAP Server nicht möglich"; } ?>
LDAP-Clients unter Ubuntu 16.04.2 LTS
Hier ist alles ein bißchen anders, sicher ähnlich auch bei entsprechenden Debian-Versionen. Ich beschreibe den Fall des verschlüsselten ldapsearch zum SunDirectoryServer 6 auf der zefi. Das Paket ldap-utils und seine Voraussetzungen sind zwar auch Ver. 2.4, benötigen aber keine Certutil-Datenbanken. Hier sind die relevanten LDAP-Pakete und die Abhängigkeiten:
$ dpkg -l | grep ldap ii ldap-auth-client 0.5.3 all meta-package for LDAP authentication ii ldap-auth-config 0.5.3 all Config package for LDAP authentication ii ldap-utils 2.4.42+dfsg-2ubuntu3.1 amd64 OpenLDAP utilities ii libaprutil1-ldap:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library - LDAP Driver ii libldap-2.4-2:amd64 2.4.42+dfsg-2ubuntu3.1 amd64 OpenLDAP libraries ii libldap2-dev:amd64 2.4.42+dfsg-2ubuntu3.1 amd64 OpenLDAP development libraries ii libnss-ldap:amd64 265-3ubuntu2 amd64 NSS module for using LDAP as a naming service ii libpam-ldap:amd64 184-8.7ubuntu1 amd64 Pluggable Authentication Module for LDAP $ apt-cache depends ldap-utils ldap-utils Depends: libc6 Depends: libldap-2.4-2 Depends: libsasl2-2 Conflicts: <ldap-client> Conflicts: <openldap-utils> Conflicts: <umich-ldap-utils> Recommends: libsasl2-modules |Suggests: libsasl2-modules-gssapi-mit Suggests: libsasl2-modules-gssapi-heimdal Replaces: <openldap-utils> ldap-utils Replaces: <openldapd> Replaces: slapd
Die globale Konfigurationsdatei ist /etc/ldap/ldap.conf . Ihr Inhalt kann durch die Dateien ldaprc, .ldaprc im Home- oder aktuellen Verzeichnis aufgehoben werden. Wichtig ist folgende Zeile, die auf CA-Root-Zertifikat im Format x509 verweist:
tls_cacert /etc/ssl/certs/hsm-ca.pem
Verschlüsseltes ldapsearch mit Anmeldung:
$ ldapsearch -H ldaps://zefi.fh-schmalkalden.de -LLL -D cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de -x -b ou=in,dc=fh-schmalkalden,dc=de -w PASSWORT uid=nigmatzi
Hier der access-Log bei Verschlüsselung:
CONN=5876 [28/Apr/2017:14:39:35 +0200] conn=5876 op=-1 msgId=-1 - fd=43 slot=43 LDAPS connection from 212.201.64.222:51252 to 194.94.30.56 [28/Apr/2017:14:39:35 +0200] conn=5876 op=-1 msgId=-1 - SSL 128-bit AES-128 [28/Apr/2017:14:39:35 +0200] conn=5876 op=0 msgId=1 - BIND dn="cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de" method=128 version=3 [28/Apr/2017:14:39:35 +0200] conn=5876 op=0 msgId=1 - RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de" [28/Apr/2017:14:39:35 +0200] conn=5876 op=1 msgId=2 - SRCH base="ou=in,dc=fh-schmalkalden,dc=de" scope=2 filter="(uid=nigmatzi)" attrs=ALL [28/Apr/2017:14:39:35 +0200] conn=5876 op=1 msgId=2 - RESULT err=0 tag=101 nentries=1 etime=0 [28/Apr/2017:14:39:35 +0200] conn=5876 op=2 msgId=3 - UNBIND [28/Apr/2017:14:39:35 +0200] conn=5876 op=2 msgId=-1 - closing from 212.201.64.222:51252 - U1 - Connection closed by unbind client - [28/Apr/2017:14:39:36 +0200] conn=5876 op=-1 msgId=-1 - closed.
Unverschlüsseltes ldapsearch mit Anmeldung ohne das s:
$ ldapsearch -H ldap://zefi.fh-schmalkalden.de -LLL -D cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de -x -b ou=in,dc=fh-schmalkalden,dc=de -w PASSWORT uid=nigmatzi
Name Service Switch unter Ubuntu 16.04.2 LTS
Zuerst muss der client wissen, wofür welche Services genutzt werden sollen, hier werden speziell die Nutzer- und Gruppendaten in der Datei /etc/nsswitch.conf beschrieben:
... passwd: files ldap group: files ldap ...
Beschreibung der LDAP-Servers in /etc/ldap.conf (nicht verwechseln mit/etc/ldap/ldap.conf)
base ou=in,dc=fh-schmalkalden,dc=de uri ldaps://zefi.fh-schmalkalden.de ldap_version 3 binddn cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de bindpw PASSWORD rootbinddn cn=ivlbild,ou=adm,dc=fh-schmalkalden,dc=de pam_password md5 tls_cacertfile /etc/ssl/certs/hsm-ca.pem
In /etc/ldap.secret muss das Passwort für rootbinddn stehen! Einloggen eines Nutzers aus ou=in,dc=fh-schmalkalden,dc=de:
root@ivlbild:~# login ivlbild login: i_gast00 Password: Last login: Thu Apr 27 16:13:37 CEST 2017 on pts/0 Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-75-generic x86_64) .... No directory, logging in with HOME=/ i_gast00@ivlbild:/$ exit Abgemeldet root@ivlbild:~#