Hallo Zusammen,
ich suche seit Tagen nach einer Lösung für mein Problem, habe diverse Foren und Tutorials durchsucht aber keine Lösung gefunden.
Ich persöhnlich habe keinerleit Erfahrungen im Programmieren o.ä, schreibe aber im Zuge meiner Bachelorarbeit eine Web- Anwendung, die soweit funktioniert.
Die Webanwendung läuft in einem Firmennetzwerk über einen Apache Server. Nun möchte ich die Autentifizierung über die firmen LDAP Datenbank realiseren, stoße aber auf ein unlösbarer Problem: Ich bekomme keine Verbindung zustande.
Es handelt sich um eine LDAP Active Directory Datenbank die nur über SSL/TLS Verbindung zu erreichen ist. Auf diese Datenbank habe ich leider nur wenig Zugriff, also auch nicht viele Informationen. Leider weis ich auch nicht welche Notwendig wären, um mein Problem zu lösen.
Ich schildere einmal den Hergang und meine Versuche:
Ich habe ein PHP Script indem ich eine ldaps Verbindung zu dem Server aufbauen möchte. Auf dem Server konnte der Handshake festgestellt werden, jedoch wird die Anfrage vom Server abgelehnt. Das Folgende Protokoll entstand:
Zitat:
Digestbindungen, die ohne Signatur erfolgten und daher zurückgewiesen wurden: 53
Während der vergangenen 24 Stunden haben einige Clients versucht, eine der folgenden LDAP-Bindungen vorzunehmen:
(1) Eine SASL-LDAP-Bindung (Verhandlung, Kerberos, NTLM oder Digest), die keine Signatur (Integritätsüberprüfung) anforderte, oder
(2) eine einfache LDAP-Bindung über eine Klartextverbindung (ohne SSL-/TLS-Verschlüsselung).
Dieser Verzeichnisserver weist derartige Bindungen konfigurationsgemäß zurück. Dies ist die empfohlene Konfigurationseinstellung und erhöht die Sicherheit dieses Servers beträchtlich. Einzelheiten dazu finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=87923".
Eine Zusammenfassung der Anzahl derartiger Bindungen, die in den vergangenen 24 Stunden eingegangen sind, finden Sie unten.
Sie können die Protokollierung erweitern und bei jeder derartigen Bindung durch einen Client ein Ereignis protokollieren. Hierzu gehören Informationen dazu, welcher Client die Bindung vornahm. Erhöhen Sie hierzu die Einstellung für die Ereignisprotokollierungskategorie "LDAP-Schnittstellenereignisse" auf Stufe 2 oder höher.
Anzahl der einfachen Bindungen, die ohne SSL/TLS erfolgten und daher zurückgewiesen wurden: 0
Anzahl der Verhandlungs-/Kerberos-/NTLM-/Digestbindungen, die ohne Signatur erfolgten und daher zurückgewiesen wurden: 53
|
Daraus schlussvolgere ich zZt., dass ich eine Verbindung über den Befehl
erstellen muss. Doch auch hieran scheitert es. Egal welche Verbindung ich aufbauen möchte, ich erhalte den Fehler:
Zitat:
ldap_sasl_bind(): Unable to bind to server: Can't contact LDAP server
|
Über phpinfo() konnte ich sicherstellen, dass SASL Support und LDAP Support enabled sind.
Mit dem Paket adLDAP:
http://adldap.sourceforge.net/ hat das ganze auch nicht funktioniert.
Ich habe bereits das Personal bei uns in der Firma befragt, keiner konnte mir einen neuen Ansatz nennen. Eine Person hat es bereits probiert, aber auch keine Möglichkeit gefunden. Jedes Tutorial das ich gefunden habe, brachte keine Ergebnisse und nun fehlt mit ein neuer Ansatz.
Mein Quellcode sieht derzeit so aus:
PHP-Code:
$ldap_server = "ldaps://beispiel.lan/";
$port = 636;
if (!($connect= ldap_connect($ldap_server, $port)))
{
die("Keine Verbindung zum Verzeichnis-Server möglich.");
}
// Diese Parameter sind nötig für den Zugriff auf ein Active Directory:
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
// An Server binden:
if (!$bind=ldap_sasl_bind ( $connect, NULL, 'passwort', 'DIGEST-MD5', NULL, 'benutzername')) {
printf("%d - %s <br />", ldap_errno($connect), htmlspecialchars(ldap_error($connect)));
die("Bind fehlgeschlagen.");
}
else
{
exit;
}
Da mir niemand sagen konnte, ob und welche Methode (GSSAPI, GSS-SPNEGO, DIGEST-MD5) verwendet wird, habe ich es mit allen probiert. Ohne Erfolg.
Über Hilfe oder einen neuen Ansatz währe ich sehr dankbar.
Liebe grüße aus dem Norden,
Daniel