Benutzer-Werkzeuge

Webseiten-Werkzeuge


rhel:ldap-ssl

Dies ist eine alte Version des Dokuments!


php, python (zope,plone) und ldaptools mit tls zum ldapserver

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";
}
?>
rhel/ldap-ssl.1316509311.txt.gz · Zuletzt geändert: 2024/08/07 13:35 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki