Die Apache-Authentifizierung gegen LDAP schlägt für Kennwörter mit Umlauten fehl

7

Bei der Authentifizierung gegen LDAP (Active Directory, Server 2008) von einem Apache-Server wird im Fehlerprotokoll die folgende Meldung angezeigt:

authentication failure for "/": Password Mismatch

Dies geschieht nur, wenn das Passwort deutsche Umlaute enthält (ä, ö, ü). Nach dem Ändern des Passworts oder dem Versuch mit einem anderen Konto ohne Umlaute im Passwort funktioniert die Authentifizierung einwandfrei.

Hier ist meine Konfiguration:

AuthType Basic
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://[SERVER]:3268/DC=[DOMAIN]?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN       "user"
AuthLDAPBindPassword "pass"
require valid-user

Ich benutze Apache2 (2.2.16-6 + Squeeze1) unter Debian (2.6.26-2-686). Das Lustige ist, dass die obige Konfiguration bis gestern funktioniert hat (auch für Passwörter mit Umlauten) und ich sie nicht angefasst habe (ich schwöre ;-)). Ich habe bereits andere Leute mit dem gleichen Problem gefunden, aber keine Lösung.

Hat jemand eine Idee, wie das Problem gelöst werden kann oder was als nächstes zu tun ist, um möglicherweise das fehlerhafte Modul zu identifizieren?

Viele Grüße, Stefan

StefanMacke
quelle
Vielleicht haben sich einige Ihrer Gebietsschemaeinstellungen in letzter Zeit geändert?
Dana the Sane
Nein, das Gebietsschema ist (noch) auf UTF-8 eingestellt.
StefanMacke
Hier finden Sie, dass deutsche Umlaute nicht unterstützt werden: social.technet.microsoft.com/Forums/ie/de-DE/…
Mr.M

Antworten:

3

Es scheint, dass irgendwo ein Codierungsproblem auftritt. Ich kann dir nicht sagen, wo es ist, aber ich kann vorschlagen, wie du es findest.

Soweit ich weiß, gibt es 5 Stellen, an denen die Codierung möglicherweise falsch behandelt oder interpretiert wird. Diese sind:

  1. Browser wandelt Zeichen in Bytes um, die an den Webserver gesendet werden sollen
  2. Apache versteht diese Bytes, um die Kennwortzeichenfolge zu erstellen
  3. Apache + OpenLDAP wandelt die Kennwortzeichenfolge in Bytes um, die an den LDAP-Server gesendet werden sollen
  4. Active Directory wandelt die Bytes in der LDAP-Bindungsanforderung in etwas um, das mit der Kennwortdatenbank verglichen werden kann
  5. Active Directory wandelt Zeichen in Bytes um, wenn das Kennwort des Benutzers festgelegt wird

Angenommen, Sie können sich als Benutzer bei Windows anmelden, dann wissen wir, dass # 5 nicht Ihr Problem ist. Sie müssen lediglich feststellen, wo auf dem Weg Ihr Problem auftritt. Meine Vermutung ist, dass es in Schritt 2 oder 3 ist, aber ich kann nicht sicher sein.

Stellen Sie zunächst sicher, dass Sie entweder nicht https für die Kommunikation mit dem Webserver und ldaps nicht für die Kommunikation mit dem LDAP-Server verwenden. (Vielleicht wollen Sie das nicht für die Produktion, aber es macht das Leben leichter). Verwenden Sie jetzt Wireshark, um den Datenverkehr für die beiden Abschnitte Browser -> Apache und Apache -> AD zu verfolgen. Sehen Sie dort die richtigen Informationen?

Stellen Sie als Nächstes die Google-Ebene in Apache auf Debuggen ein und sehen Sie, was dort gedruckt wird. Das Passwort wird Ihnen nicht angezeigt, aber in der Debug-Ebene sollten andere Informationen wie der Benutzername angezeigt werden. Wenn Sie einen gefälschten Benutzernamen mit Akzenten verwenden, werden diese korrekt angezeigt?

Sobald Sie den Schritt identifiziert haben, der die Codierung unterbricht, sind Sie zu 90% auf dem Weg, um zu wissen, wie Sie das Problem beheben können!

Gagravarr
quelle