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?
Antworten:
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.exe
Tool 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.conf
Datei so ändern, dass sie auf das KDC als verweistkdc = 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.
quelle
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.
quelle
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.
quelle
Falls jemand dieses Problem mit mod_proxy_ajp hat, schauen Sie sich Folgendes an: Ab welcher Apache-Version ist LimitRequestFieldSize nicht mehr auf maximal 8 KB fest codiert?
quelle