Wer sollte nicht schon immer mal aus PHP auf ActiveDirectory zugreifen. Und das ganze am besten noch SSL-Geschützt über LDAPS (Port 636). Und das gnaze auch noch auf einem Windows Server 2003 mit IIS … wuah … aber in bestimmten Situationen geht es nicht anders.
Wie man PHP im IIS einbindet werde ich hier nicht beschreiben. Allerdings sollte man das LDAP-Modul auch laden. Dazu entfernt man einfach den Kommentar in der Zeile “;extension=php_ldap.dll”. Aber noch nicht genug. In der Standardeinstellung versucht das LDAP-Modul bei einer Verbindung über SSL das Zertifikat zu prüfen. Dies scheitert meistens und man erhält die Fehlermeldung ” ldap_bind(): Unable to bind to server: Can’t contact LDAP server”. Unschön. Um die Zertifikatsprüfung abzuschalten, erstellt man auf Laufwerk C: des Servers den Ordner “C:\openldap\sysconf” und legt dort eine Datei namens “ldap.conf” ab. Hier können nun Einstellungen für das OpenLDAP-Modul gesetzt werden. Um die Zertifikatsprüfung abzuschalten, reicht es hier die Zeile “TLS_REQCERT never” einzutragen. Anschließend sollte man den IIS “WWW-Publishingdienst” neustarten.
Eine Verbindung zum LDAP-Server stellt man nun mit PHP wie folgt her:
$ldap->user="user@ad.firma.de"; // Benutzername in form LOGON@DOMÄNE
$ldap->password="12345"; // Passwort des Benutzers
$ldap->server="ad.firma.de"; // LDAP-Server, bei AD-Domänen kann einfach der Domänenname angegeben werden
/* Verbindung mit dem LDAP-Server herstellen */
$ldap->conn=ldap_connect("ldaps://".$ldap->server, 636); // Verbinde mit Server über LDAPS auf Port 636
ldap_set_option($ldap->conn, LDAP_OPT_PROTOCOL_VERSION, 3); // Verwende LDAP Protokoll version 3
ldap_set_option($ldap->conn, LDAP_OPT_REFERRALS, 0); // Referenzen nicht folgen
/* Nun melden wir uns am LDAP-Server an (LDAP-BIND)*/
$ldap->bind=ldap_bind($ldap->conn,$ldap->user,$ldap->password); // Verbindung herstellen
Nun könnte man im LDAP Suchanfragen oder andere Dinge unter den Rechten des Bind-Benutzers starten. Viel Spaß.