Benutzer-Werkzeuge

Webseiten-Werkzeuge


rhel:ldap-ssl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
rhel:ldap-ssl [2017/05/11 09:08] ottorhel:ldap-ssl [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-===== 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. 
- 
-<note>Warscheinlich hat das nichts mit der Version 2.4 zu tun, sondern mit der jeweiligen Linuxdistribution. In CentOS-6 wurde scheinbar auf certutil umgestellt!</note> 
- 
-=== 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: 
- 
-<code> 
-certutil -d /etc/openldap/certs -L 
- 
-Certificate Nickname                                         Trust Attributes 
-                                                             SSL,S/MIME,JAR/XPI 
- 
-</code> 
- 
-hinzufügen einer neuen CA4 zu den CA's: 
- 
-<code> 
-certutil -A -d /etc/openldap/certs -n "CA4" -t CT,, -i /root/cacert.pem 
-</code> 
- 
-gucken ob das neue ca installiert wurde: 
- 
-<code> 
-certutil -d /etc/openldap/certs -L 
- 
-Certificate Nickname                                         Trust Attributes 
-                                                             SSL,S/MIME,JAR/XPI 
- 
-CA4                                                          CT,,  
-</code> 
- 
-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: 
- 
-<code>TLS_REQCERT never</code> 
- 
-debug probleme bei php: 
- 
-php-option für ldap, die ich vor das erste ldap-connect eingefügt habe: 
- 
-<code>ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);</code> 
- 
-in der logdatei vom webserver findet sich dann folgendes (wenn TLS_REQCERT noch nicht auf 'never' steht): 
- 
-<code> 
-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 
-</code> 
- 
- 
-Schalter Z für TLS! 
- 
-==== Installation Wurzelzertifikat ==== 
- 
-Prüfe die folgenden Einstellungen in /etc/openldap/ldap.conf 
-<code> 
-  # 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</code> 
- 
-Das iuk2ca.crt-Zertifikat muss nach /etc/openldap/cacerts/iukca2.crt 
-kopiert werden. 
-Mit 
- 
-<note warning>hier gehts nicht weiter, ab CentOS-6 geht das so scheinbar nicht mehr, siehe ganz oben!!</note> 
- 
-<code> 
-  openssl x509 -subject_hash -noout -in iukca2.crt</code> 
- 
-wenn -subject_hash nicht unterstützt wird dann mit 
- 
-<code> 
- openssl x509 -hash -noout -in iukca2.crt</code> 
- 
-wird der Subject-Hash angezeigt, z.B. 3e4202dc, mit 
- 
-<code> 
-  ln -s iukca2.crt 3e4202dc.0</code> 
- 
-wird ein entsprechender Symlink angelegt. 
- 
-ACHTUNG: punkt-null nicht vergessen, der symlink lautet also <hash>.0 und nicht <hash>! 
- 
-Nun kann man mit 
- 
-<code> 
-  openssl s_client -connect ldap.fh-schmalkalden.de:636 -CApath /etc/openldap/cacerts</code> 
- 
-prüfen, ob eine SSL-Verbindung hergestellt werden kann. 
-Dann kann mit 
- 
-<code> 
- ldapsearch -Z -H ldap://ldap.fh-schmalkalden.de -b "ou=students,dc=fh-sm,dc=de" -x "(uid=...)"</code> 
- 
-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: 
- 
-<code> 
- ldap.SERVER_DOWN: {'info': 'TLS: hostname does not match CN in peer certificate', 'desc': "Can't contact LDAP server"}</code> 
- 
-d.h. wir müssen mit dem namen connecten der im zert drinsteht, also in diesem fall mit ldap1.fh-schmalkalden.de 
-> 
- 
-<code> 
- >>> a=ldap.initialize('ldaps://ldap1.fh-schmalkalden.de') 
- >>> a.search('dc=fh-sm,dc=de',2,'cn=jens*') 
- 1</code> 
- 
-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. 
- 
- 
-<code php> 
-<?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"; 
-} 
-?> 
-</code> 
- 
-==== 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: 
- 
-<code> 
-$ 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 
-</code>  
- 
-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: 
- 
-<code> 
-tls_cacert /etc/ssl/certs/hsm-ca.pem 
-</code>  
- 
-Verschlüsseltes ldapsearch mit Anmeldung: 
- 
-<code> 
-$ 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 
-</code>  
- 
-Hier der access-Log bei Verschlüsselung:  
-<code> 
-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. 
-</code>  
- 
- 
-Unverschlüsseltes ldapsearch mit Anmeldung ohne das **s**: 
- 
-<code> 
-$ 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 
-</code> 
- 
-==== 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: 
- 
-<code> 
-... 
-passwd:         files ldap 
-group:          files ldap 
-... 
-</code> 
- 
-Beschreibung der LDAP-Servers in **/etc/ldap.conf** (nicht verwechseln mit/etc/ldap/ldap.conf) 
- 
-<code> 
-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  
-</code> 
- 
-In **/etc/ldap.secret** muss das Passwort für rootbinddn stehen! Einloggen eines Nutzers aus  
-ou=in,dc=fh-schmalkalden,dc=de: 
- 
-<code> 
-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:~#  
-</code> 
- 
- 
-==== Python-LDAP-Clients in Solaris 10 ==== 
- 
-Die OpneCSW-Pakete stellen für Python unter Solaris 10 die aktuellen Module bereit: 
- 
-<code> 
-$ /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 
-... 
-</code> 
- 
-Die Konfiguratin des LDAP-cliens erfolgt in cat /etc/opt/csw/openldap/ldap.conf: 
- 
-<code> 
-TLS_CACERTDIR /etc/opt/csw/openldap/cacerts 
-TLS_REQCERT   hard 
-</code> 
- 
-Die Wurzel-CAs in das TLS_CACERTDIR kopieren und mit dem passenden Hash (aus dem gleichem Paket erzeugt!) verlinken: 
- 
-<code> 
-# 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 
-</code> 
- 
-Die Hashes 9e909c3d und e0aa5bd7 wurden mit einer alten openssl-Version erzeugt und erwiesen sich als unbrauchbar. Der Test mit Python: 
- 
-<code> 
-$ /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 
->>>  
-</code> 
- 
  
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