Apache Bad Request "Die Größe eines Anforderungsheaderfelds überschreitet das Serverlimit" mit Kerberos SSO

9

Ich richte ein SSO für Active Directory-Benutzer über eine Website ein, die auf einem Apache (Apache2 unter SLES 11.1) ausgeführt wird, und beim Testen mit Firefox funktioniert alles einwandfrei. Wenn ich jedoch versuche, die Website in Internet Explorer 8 (Windows 7) zu öffnen, erhalte ich nur Folgendes

"Ungültige Anforderung

Ihr Browser hat eine Anfrage gesendet, die dieser Server nicht verstehen konnte.

Die Größe eines Anforderungsheaderfelds überschreitet das Serverlimit.

Autorisierung: Verhandeln [ultralange Zeichenfolge] "

Meine vhost.cfg sieht so aus:

<VirtualHost hostname:443>
  LimitRequestFieldSize 32760
  LimitRequestLine 32760
  LogLevel debug

  <Directory "/data/pwtool/sec-data/adbauth">
    AuthName "Please login with your AD-credentials (Windows Account)"
    AuthType Kerberos
    KrbMethodNegotiate on
    KrbAuthRealms REALM.TLD
    KrbServiceName HTTP/hostname
    Krb5Keytab /data/pwtool/conf/http_hostname.krb5.keytab
    KrbMethodK5Passwd on
    KrbLocalUserMapping on
    Order allow,deny
    Allow from all
  </Directory>

  <Directory "/data/pwtool/sec-data/adbauth">
    Require valid-user
  </Directory>

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/ssl.crt/hostname-server.crt
    SSLCertificateKeyFile /etc/apache2/ssl.key/hostname-server.key
</VirtualHost>

Ich habe auch sichergestellt, dass die Cookies gelöscht werden, und mehrere kleinere Werte für LimitRequestFieldSize und LimitRequestLine ausprobiert.

Eine andere Sache, die mir komisch vorkommt, ist, dass ich selbst mit dem LogLevel-Debug keine Protokolle darüber bekomme. Die letzte Zeile des Protokolls ist

ssl_engine_kernel.c(1879): OpenSSL: Write: SSL negotiation finished successfully

Hat jemand eine Idee dazu?

Aurelin
quelle
Haben Sie eine Lösung für dieses Problem gefunden? Ich habe genau die gleichen Symptome.
Gani Simsek
Hey Gani, ich bin mir nicht sicher. Ich habe meine "Nicht-sicher-ob-funktioniert" -Lösung hier geschrieben . Serverfault.com/a/426599/111458 . Bitte entschuldige meine späte Antwort. Wenn Sie die Lösung noch benötigen, versuchen Sie meine Antwort und lassen Sie mich / uns wissen, ob es funktioniert hat =)
Aurelin

Antworten:

7

Mein Bauch sagt, dass Sie ein sehr großes Sicherheitstoken haben, möglicherweise weil der Benutzer Mitglied einer großen Anzahl von Gruppen ist. Die AD Kerberos-Implementierung stellt Apache standardmäßig ein PAC ( Privilege Attribute Certificate ) zur Verfügung . Diese Struktur kann groß sein, wenn der Benutzer Mitglied einer signifikanten Anzahl von Gruppen ist. Mit dem tokensz.exeTool können Sie die Tokengröße des Benutzers anzeigen.

Wenn dies das Problem ist, können Sie das UserAccountControl-Attribut des Benutzerkontos ändern , um zu verhindern, dass der PAC gesendet wird.

Möglicherweise können Sie Ihre /etc/krb5.confDatei so ändern, dass sie auf das KDC als verweist kdc = tcp/kdc.name.here. Dieses Problem kann auftreten, wenn der PAC dazu führt, dass das Token für ein UDP-Datagramm zu groß ist. Das Erzwingen der Kommunikation mit TCP zum KDC ist jedoch auch eine mögliche Problemumgehung.

Das Ändern dieses Werts für 1.000 Benutzer ist für Ihre AD-Administratoren nicht schwierig, wenn dies Ihr Problem löst.

Evan Anderson
quelle
(Verdammt, ich habe den Kommentar versehentlich gelöscht. Ich schlafe anscheinend immer noch.) Nun, also kann ich sie fragen, ob sie das ändern würden, aber ich bezweifle es aufgrund der Organisation. Struktur. Und es ist nicht so, dass mein Projekt super wichtig ist, also werde ich zuerst die Modifikation von /etc/krb5.conf versuchen. Danke. Übrigens, eine Idee, warum dieses Problem nur im IE auftritt, aber nicht in Opera oder Firefox?
Aurelin
Ich habe versucht, /etc/krb5.conf zu ändern, aber das behebt das überhaupt nicht. Eine andere Sache, die ich gerade herausgefunden habe, ist, dass Ihr Link nur eine Lösung für Win2k3-Server beschreibt, aber wir führen Win2k8 RC2 aus. Ich habe vergessen, das zu erwähnen, sorry.
Aurelin
Nun ... ich muss sagen, es war ein bisschen komisch
Aurelin
2

Ich hatte diesen Fehler auf einer Drupal 7-Site in Safari auf dem Mac und stellte fest, dass das Schließen der Browserfenster und das Löschen des Cache des Browsers, das Beenden des Browsers, das erneute Öffnen und das Neuladen der Seite dazu beitrugen, den nur aufgetretenen Fehler zu beheben diesmal.

Ungültige Anfrage Ihr Browser hat eine Anfrage gesendet, die dieser Server nicht verstehen konnte. > Die Größe eines Anforderungsheaderfelds überschreitet das Serverlimit. Cookie / n

Dean Flory
quelle
2
Klingt für mich nach einer "Microsoft" -Lösung: Starten Sie neu und hoffen Sie, dass das Problem behoben ist.
Colin 't Hart
1
@Colin, unabhängig davon, wie sehr dies nach einer "Microsoft" -Antwort klingt, ist dies oft genau das , was erforderlich ist. Wenn der Cache eines Browsers geleert wird, können viele Browser den speicherinternen Cache nicht leeren, weshalb der Browser neu gestartet werden muss. Dies gilt sicherlich für Mac-Versionen von Firefox, Chrome und Camino. Ich benutze Safari nie, daher kann ich dies nicht kommentieren.
John Gardeniers
1

Ich habe eine andere Lösung gefunden, bin mir aber nicht sicher, ob sie wirklich funktioniert. Apache Docs gibt an, dass ich für große Pakete LimitRequestFieldSize und / oder LimitRequestLine festlegen muss.

Wenn Sie den Wert von LimitRequestLine auf einen höheren Wert als 8 KB festlegen möchten, müssen Sie die Quelle ändern und Apache neu kompilieren, da 8 KB die feste maxSize ist ( http://httpd.apache.org/docs/). 2.2 / mod / core.html # limitrequestline ).

Ich weiß nicht genau, ob diese Methode funktioniert, da ich später Apache aus unserem eigenen Repository auf einem zweiten Server neu installiert habe. Es scheint, dass dies eine andere Paketversion war, da das Problem dort nicht aufgetreten ist.

Aurelin
quelle