Ich kann nicht herausfinden, warum die Apache LDAP-Authentifizierung fehlschlägt

8

Plötzlich, gestern, konnte einer meiner Apache-Server keine Verbindung zu meinem LDAP (AD) -Server herstellen. Auf diesem Server werden zwei Sites ausgeführt, die beide LDAP verwenden, um sich bei meinem AD-Server zu authentifizieren, wenn sich ein Benutzer bei einem der Sites anmeldet. Es hatte vor zwei Tagen gut funktioniert. Aus unbekannten Gründen funktionierte es seit gestern nicht mehr. Das Fehlerprotokoll sagt nur Folgendes:

auth_ldap authenticate: user foo authentication failed; URI /FrontPage [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server], referer: http://mysite.com/

Ich dachte, mein selbstsigniertes SSL-Zertifikat sei möglicherweise abgelaufen, also habe ich ein neues für mysite.com erstellt, aber nicht für den Server-Hostnamen selbst, und das Problem blieb bestehen. Ich habe die Protokollierung auf Debug-Ebene aktiviert. Es zeigt die vollständige SSL-Transaktion mit dem LDAP-Server an und scheint fehlerfrei bis zum Ende abgeschlossen zu sein, wenn die Meldung "LDAP-Server kann nicht kontaktiert werden" angezeigt wird. Ich kann ldapsearch über die Befehlszeile auf diesem Server ausführen und mich bei diesem Server anmelden, der auch LDAP verwendet, sodass ich weiß, dass der Server eine Verbindung zum LDAP / AD-Server herstellen und diesen abfragen kann. Es ist nur Apache, der keine Verbindung herstellen kann.

Das Googeln nach einer Antwort hat nichts ergeben, also frage ich hier. Kann jemand einen Einblick in dieses Problem geben?

Hier ist der LDAP-Abschnitt aus der Apache-Konfiguration:

<Directory "/web/wiki/">
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Login"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    #AuthBasicAuthoritative off
    AuthLDAPUrl ldaps://domain.server.ip/dc=full,dc=context,dc=server,dc=name?sAMAccountName?sub
    AuthLDAPBindDN cn=ldapbinduser,cn=Users,dc=full,dc=context,dc=server,dc=name
    AuthLDAPBindPassword password
    require valid-user
</Directory>
SethG
quelle
Komischerweise hatte ich einen Apache 2-Server, der sich gegen LDAP authentifizierte und monatelang einwandfrei funktionierte. Erst letzte Woche trat genau dieses Problem auf! Ich kann für mein ganzes Leben nicht herausfinden, was es ist, ich habe alle möglichen Dinge ausprobiert. Ich werde mir diese Frage ansehen.
Kamil Kisiel

Antworten:

9

Eine Paketverfolgung vom httpd-Server / LDAP-Client ergab eine Meldung, dass die Zertifizierungsstelle unbekannt ist.

TLSv1-Warnung (Stufe: Schwerwiegend, Beschreibung: Unbekannte Zertifizierungsstelle)

Ich habe die folgende Option gefunden und zu meiner httpd.conf hinzugefügt:

  LDAPVerifyServerCert          off

Das hat mein Problem unter CentOS 6 behoben. Die CentOS 5 httpd-Server erforderten keine Änderungen und hatten die ganze Zeit ohne diese Option funktioniert.

dmourati
quelle
Diese Antwort brachte mir ein Bier ein. Ein Kollege stieß auf dieses Problem, und ich hörte ihn zufällig darüber klagen, warum sein neu geprägter Debian-Server keine Verbindung zu unserem LDAP-Server herstellen konnte. Ich habe ihm diesen Link gegeben und sein Problem wurde sofort gelöst.
Dmourati
Plus viele. Diese Antwort hat mein Fell wirklich gerettet.
AnrDaemon
2

Ich hatte zuvor ein ähnliches Problem mit AD unter Windows 2003: Die Lösung, die ich gefunden habe, bestand darin, nicht mit dem vollständigen DN zu binden, sondern stattdessen die Syntax user @ domain zu verwenden:

AuthLDAPBindDN [email protected]
Sam Kingston
quelle
1

Haben Sie von Ihrem LDAP-Server aus Zugriff auf die Protokolle? Sie können bei der Behebung dieses Problems hilfreich sein.

Eric Dennis
quelle
Der LDAP-Server ist eigentlich ein Windows AD-Server. Ich habe die Ereignisprotokolle eingecheckt und nichts Nützliches gefunden. Nicht einmal ein Hinweis darauf, dass der Apache-Server überhaupt versucht hat, eine Verbindung herzustellen.
SethG
Sie sollten überprüfen, ob der Apache-Server die LDAP-Anforderung tatsächlich an den AD-Server sendet. Es ist möglich, dass etwas die LDAP-Anforderung daran hindert, überhaupt zum AD-Server zu gelangen. Wenn Sie über ausreichende Berechtigungen auf dem Windows-Computer verfügen, können Sie Wireshark ausführen, um zu überprüfen, ob die LDAP-Anforderung tatsächlich ordnungsgemäß an AD gesendet wird. Ist dies nicht der Fall, überprüfen Sie das Netzwerk und die Firewalls zwischen den beiden Servern. Führen Sie iptables auf dem Apache-Server aus?
Eric Dennis
1

Ich habe dies gesehen, als ein Paketupdate Änderungen in der Client-ldap.conf (normalerweise /etc/ldap.conf oder /etc/openldap/ldap.conf) verursacht und die Option TLS_REQCERT auf eine strengere Einstellung zurücksetzt. Es kann das SSL ordnungsgemäß aushandeln, schlägt jedoch am Ende immer noch fehl, da es die Zertifikatkette von einem vertrauenswürdigen Stamm aus nicht validieren kann.

Shollyman
quelle
1

Möglicherweise möchten Sie die Uhr der Server überprüfen. Wenn der Zeitunterschied mehr als ein paar Minuten beträgt, ist das Authentifizierungsticket ungültig.

Obwohl dies nicht genau die Fehlermeldung ist, weist der Teil "Der andere Server erhält plötzlich das gleiche Problem" möglicherweise auf ein solches Problem hin.

Ger Apeldoorn
quelle
1

Sie müssen das LDAP-CA-Zertifikat aktivieren, um mit LDAPS arbeiten zu können

riss-
quelle
1

Ich hatte ein ähnliches Problem. Ich könnte das Zertifikat mit openssl erhalten, ich könnte Active Directory über SSL mit ldapsearch an denselben Ports abfragen. Schließlich wechselte ich zu den Microsoft Global Catalog-Ports 3268 oder 3269 und beide funktionierten. Die Microsoft Windows 2003-Server wurden gepatcht, dies geschah jedoch Tage vor dem Auftreten der Probleme.

Sum Buddy
quelle
0

Ich habe LDAPS auf allen unseren Servern implementiert und bin auch auf dieses Problem gestoßen. Verschwindet es, wenn Sie zu Klartext-LDAP zurückkehren (nicht ideal, aber nützlich, um die Ursache des Problems zu kennen). Wenn ja, muss ich noch eine Lösung finden, aber vielleicht können wir gemeinsam einen Fehler in authnz_ldap isolieren.

Kyle Smith
quelle
0

Ich gehe davon aus, dass Ihre Befehlszeilenexperimente denselben "Benutzer binden" verwendeten wie in Ihren Apache-Konfigurationen. Wenn nicht, sollten Sie überprüfen, ob Sie das richtige aktuelle Passwort haben.

In der Vergangenheit musste ich einmal den globalen Katalogport anstelle des Standard-LDAP-Ports für die AD-Domäne verwenden. Ich kann mich nicht an den Grund erinnern. Für ldaps wie in Ihrer URL oben wäre dies Port 3269.

Zac Thompson
quelle
0

Dies funktioniert so, dass Ihre Website zuerst mit den Anmeldeinformationen Ihres Bindungsbenutzers eine Verbindung zu AD herstellen muss. Sobald diese Verbindung hergestellt ist, wird dieser Zugriff verwendet, um die Anmeldeinformationen des Benutzers zu überprüfen, der versucht, auf Ihre Website zuzugreifen.

Laut Ihrer Fehlermeldung scheint es, dass der Prozess keine Verbindung zu AD als Bindungsbenutzer (AuthLDAPBindDN) herstellen kann.

Stellen Sie sicher, dass das Bindebenutzerkonto in Active Directory nicht deaktiviert ist und dass das von Ihnen als (AuthLDAPBindPassword) angegebene Kennwort korrekt ist . Stellen Sie außerdem sicher, dass Ihr Bindungsbenutzer über die erforderlichen Berechtigungen zum Suchen anderer Benutzer verfügt (in unserem Fall muss er Mitglied der Domänenbenutzer sein).

Brent
quelle
0

Ich habe ein ähnliches Problem, das ich durch Ausführen dieses Befehls identifiziert habe:

openssl s_client -connect $ldap_host:636 -state -nbio 2>&1. Ich denke, mod_ldap verwendet openssl darunter, daher sollte dies für das Debuggen ziemlich konsistent sein.

Ich habe es mit einem anderen SSL-verschlüsselten Server verglichen, von dem ich wusste, dass er funktioniert. Bei einer ordnungsgemäß überprüften SSL-Verbindung wird eine Kette angezeigt, die zu einer Stammzertifizierungsstelle geht und 0 zurückgibt. Ein Fehler bei der SSL-Überprüfung gibt eine Nummer und einen Grund an. Sie können die Ausgabe verwenden, um festzustellen, was falsch läuft.

In meinem Fall werden die LDAP-Serverzertifikate von Verisign signiert, das Zwischenzertifizierungsstellenzertifikate verwendet . OpenSSL kann das Zertifikat nicht überprüfen und die Verbindung wird abgelehnt ("Verbindung vom Server abgelehnt" ist nicht hilfreich).

jldugger
quelle
0

Ich hatte gerade dieses Problem ("ldap-Server kann nicht kontaktiert werden") auf RHEL6 und es war das Ergebnis von Änderungen an openldap. yum hatte die Konfigurationsdatei /etc/openldap/ldap.conf aktualisiert, aber anstatt sie zu überschreiben (falls sie angepasst wurde; in meinem Fall nicht), wurde eine ldap.conf.rpmnew-Datei erstellt.

Das Kopieren der .rpmnew-Version über ldap.conf hat das Problem behoben.

(Ich kann nicht zustimmen, dass das Deaktivieren der Zertifikatsüberprüfung eine Antwort darauf ist. Dadurch wird das Problem auf potenziell gefährliche Weise vermieden.)

Manyon
quelle
0

Ich konnte dieses Problem beheben, indem ich die hier gefundenen Pakete berkelydbund installierte .openldap

Der Unterschied besteht darin, dass RedHat damit begonnen hat, Dinge zu verknüpfen, nssanstatt opensslSSL-Unterstützung zu leisten. In diesem Fall bricht das alle Dinge. Die Installation dieser Pakete (die mit openssl verknüpft sind) behebt das Problem. Holen Sie sich einfach die Pakete und führen Sie aus:

yum install berkeleydb-ltb* openldap-ltb*

Starten Sie dann Apache neu, und Sie sollten im Geschäft sein.

Qhartman
quelle