Konfiguruję logowanie jednokrotne dla użytkowników usługi Active Directory za pośrednictwem strony internetowej działającej na Apache (Apache2 na SLES 11.1), a podczas testowania z Firefoksem wszystko działa dobrze. Ale kiedy próbuję otworzyć stronę internetową w Internet Explorerze 8 (Windows 7), dostaję tylko
"Zła prośba
Twoja przeglądarka wysłała żądanie, którego ten serwer nie mógł zrozumieć.
Rozmiar pola nagłówka żądania przekracza limit serwera.
Autoryzacja: Negocjuj [bardzo długi ciąg] ”
Mój vhost.cfg wygląda następująco:
<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>
Upewniłem się również, że pliki cookie zostały usunięte i wypróbowałem kilka mniejszych wartości dla LimitRequestFieldSize i LimitRequestLine.
Kolejną rzeczą, która wydaje mi się dziwna, jest to, że nawet przy debugowaniu LogLevel nie otrzymam żadnych logów na ten temat. Ostatni wiersz dziennika to
ssl_engine_kernel.c(1879): OpenSSL: Write: SSL negotiation finished successfully
Czy ktoś ma na to pomysł?
Odpowiedzi:
Moja intuicja mówi, że masz bardzo duży token bezpieczeństwa, być może dlatego, że użytkownik jest członkiem dużej liczby grup. Implementacja AD Kerberos domyślnie zapewni Apache'owi certyfikat Privilege Attribute Certificate (PAC). Ta struktura może być duża, jeśli użytkownik jest członkiem znacznej liczby grup. Możesz użyć tego
tokensz.exe
narzędzia, aby zobaczyć rozmiar tokena użytkownika.W takim przypadku możesz zmodyfikować atrybut UserAccountControl konta użytkownika, aby zapobiec wysyłaniu PAC.
Być może uda Ci się uniknąć modyfikacji
/etc/krb5.conf
pliku, aby odwoływał się do KDC jakokdc = tcp/kdc.name.here
. Ten problem może wystąpić, jeśli PAC powoduje, że token jest zbyt duży dla datagramu UDP, ale wymuszenie komunikacji z KDC za pomocą TCP jest również możliwym obejściem.Zmiana tej wartości na 1000 użytkowników nie jest trudna dla administratorów AD, jeśli rozwiąże Twój problem.
źródło
Ten błąd występował na stronie Drupal 7 w Safari na Macu i stwierdziłem, że zamknięcie okien przeglądarki i wyczyszczenie pamięci podręcznej przeglądarki, zamknięcie przeglądarki, otwarcie jej z powrotem i ponowne załadowanie strony działało w celu zaprzestania błędu, który tylko się zdarzył ten jeden raz.
źródło
Znalazłem inne rozwiązanie, choć nie jestem pewien, czy to naprawdę działa. Apache Docs stwierdza, że dla dużych pakietów będę musiał ustawić LimitRequestFieldSize i / lub LimitRequestLine.
Chodzi o to, że jeśli chcesz ustawić wartość LimitRequestLine na wartość wyższą niż 8 KB, musisz zmodyfikować źródło i ponownie skompilować Apache, ponieważ 8 KB to stały maxSize ( http://httpd.apache.org/docs/ 2.2 / mod / core.html # limitrequestline ).
Nie wiem na pewno, czy ta metoda działa, ponieważ później ponownie zainstalowałem apache z naszego repozytorium na drugim serwerze. Wygląda na to, że była to inna wersja pakietu, ponieważ problem tam nie wystąpił.
źródło
Na wypadek, gdyby ktoś napotkał ten problem z mod_proxy_ajp, spójrz na: Od której wersji Apache'a limitRequestFieldSize nie jest już zakodowany na stałe do 8k?
źródło