LDAPS Bindung Mit PHP und Microsoft IIS 10

Vor kurzem stand ich während einer kleinen PHP-Entwicklung vor einem Problem. Anforderung war es, einen Verzeichnisdienst via LDAPS anzubinden um gewisse Attribute aus dem Active Directory auszulesen. Da in einer modernen Microsoft Active Directory Infrastruktur zukünftig nur noch Bindungen verschlüsselt, also via LDAPS/636 akzeptiert werden, war klar das diese Methode als Anbindung gewählt sein muss.

Umgesetzt werden sollte das Ganze auf Basis eines Windows Servers 2019 mit installierter Webserver-Rolle, den Internetinformationsdiensten Version 10. Zusätzlich wurde PHP v7.4 for IIS via Web Plattform Installer nachinstalliert.

Sofern eine eigene Unternehmens Root-CA ausgeführt wird, sollten die Verzeichnisserver bereits durch Auto-Enrollment ein intern gültiges Zertifikat vorhalten. PHP auf IIS mit aktivierter LDAP-Extension greift allerdings nicht auf den internen Zertifikatsspeicher des Webservers zu, sondern bedient sich einem eigenen Zertifikatsspeicher. Ergo das Root-CA Zertifikat ist für die Bindung an dieser Stelle noch unbekannt bzw. ungültig. Der Pfad zum dem Zertifikatsspeicher wird in diesem Fall über eine Konfigurationsdatei, der ldap.conf, definiert – und hier lag das Problem.

Wo ist diese Konfigurationsdatei zu finden?
Antwort: Die Datei ist standardmäßig nicht vorhanden. Sie muss also manuell erstellt werden. Die zweite Frage die sich stellt: wo muss diese Datei abgelegt werden?

An dieser Stelle wird es dann spannend… in der verwendeten, aber auch vorherigen PHP Versionen, ist der Pfad in der entsprechenden PHP Erweiterung für diese Datei hart kodiert und erwartet auf einem Windows Server den Pfad:

C:\openldap\sysconf\ldap.conf

Anmerkung: Es ist eine Methode dokumentiert, dass das Angeben des Pfades für die Konfigdatei auch über eine Systemvariable „LDAPCONF“ ermöglichen soll. Diese Methode hat in meinen Tests leider nicht funktioniert. Möglicher Hintergrund ist, dass sich dies in den PHP-Versionen unterscheidet. Auch das Ablegen der ldap.conf im Root-Stamm des Systemdatenträgers (C:\ldap.conf) wird also Möglichkeit genannt. Aber auch dies hat bei mir ootb nicht funktioniert.

In der Datei muss dann mit entsprechender Syntax nur noch der Pfad zu dem Zertifikat hinterlegt werden. Ein gesamter Ordner mit mehreren Zertifikaten ist ebenfalls möglich. Wichtig hierbei, die Zertifikate müssen im PEM Format vorliegen. Dazu am besten via openssl das Zertifikat entsprechend konvertieren.

Beispiel für Angabe eines Root-CA-Zertifikats:

TLS_CACERT C:\certs\ca.pem

Oder Angabe eines Verzeichnisses:

TLS_CACERTDIR C:\certs\

Nach Neustart des Webservers sollte die Bindung via LDAPS/636 mittels PHP funktionieren.

Viel Erfolg.

Leon Gawinski

System Engineer Softwarebereich Microsoft

Empfohlene Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"