Benutzer-Werkzeuge

Webseiten-Werkzeuge


rhel:ldap-ssl

Dies ist eine alte Version des Dokuments!


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.

Warscheinlich hat das nichts mit der Version 2.4 zu tun, sondern mit der jeweiligen Linuxdistribution. In CentOS-6 wurde scheinbar auf certutil umgestellt!

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

hier gehts nicht weiter, ab CentOS-6 geht das so scheinbar nicht mehr, siehe ganz oben!!
  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 ldap1.fh-schmalkalden.de

 >>> a=ldap.initialize('ldaps://ldap1.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:~# 

Python-LDAP-Clients in Solaris 10

Die OpneCSW-Pakete stellen für Python unter Solaris 10 die aktuellen Module bereit:

$ /opt/csw/bin/pkgutil -l
...
CSWliblber2-4-2
CSWlibldap-r2-4-2
CSWlibldap2-4-2
...
CSWopenssh-client
CSWopenssl-utils
CSWpkgutil
CSWpy-ldap
CSWpy-mysql
CSWpython
CSWpython27
...

Die Konfiguratin des LDAP-cliens erfolgt in cat /etc/opt/csw/openldap/ldap.conf:

TLS_CACERTDIR /etc/opt/csw/openldap/cacerts
TLS_REQCERT   hard

Die Wurzel-CAs in das TLS_CACERTDIR kopieren und mit dem passenden Hash (aus dem gleichem Paket erzeugt!) verlinken:

# cd /etc/opt/csw/openldap/cacerts
# ln -s ca3.cert $(/opt/csw/bin/openssl x509 -hash -noout -in ca3.cert).0
# ln -s CA4.crt $(/opt/csw/bin/openssl x509 -hash -noout -in CA4.crt).0
# ls -l
Gesamt 14
lrwxrwxrwx   1 root     root           8 Mai 10 15:22 7a869ab8.0 -> ca3.cert
lrwxrwxrwx   1 root     root           8 Mai 10 14:46 9e909c3d.0 -> ca3.cert
lrwxrwxrwx   1 root     root           7 Mai 10 15:22 bf7aad8a.0 -> CA4.crt
-rw-r--r--   1 root     root        1391 Mai 10 14:44 ca3.cert
-rw-r--r--   1 root     root        2212 Mai 10 14:44 CA4.crt
lrwxrwxrwx   1 root     root           7 Mai 10 14:45 e0aa5bd7.0 -> CA4.crt

Die Hashes 9e909c3d und e0aa5bd7 wurden mit einer alten openssl-Version erzeugt und erwiesen sich als unbrauchbar. Der Test mit Python:

$ /opt/csw/bin/python2.6  
Python 2.6.9 (unknown, Mar  3 2016, 10:50:46) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import ldap
>>> a=ldap.initialize('ldaps://ldap3.fh-schmalkalden.de')
>>> a.search('dc=fh-sm,dc=de',2,'cn=jens*')
1
>>> a=ldap.initialize('ldaps://ldap1.fh-schmalkalden.de')
>>> a.search('dc=fh-sm,dc=de',2,'cn=jens*')
1
>>> ^D
$ /opt/csw/bin/python
Python 2.7.11 (default, Mar 14 2016, 12:49:58) 
[GCC 5.2.0] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import ldap
>>> a=ldap.initialize('ldaps://ldap3.fh-schmalkalden.de')
>>> a.search('dc=fh-sm,dc=de',2,'cn=jens*')
1
>>> a=ldap.initialize('ldaps://ldap1.fh-schmalkalden.de')
>>> a.search('dc=fh-sm,dc=de',2,'cn=jens*')
1
>>> 
rhel/ldap-ssl.1494486523.txt.gz · Zuletzt geändert: 2024/08/07 13:35 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki