Błędne żądanie Apache „Rozmiar pola nagłówka żądania przekracza limit serwera” w przypadku jednokrotnego logowania Kerberos

9

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ł?

Aurelin
źródło
Czy udało Ci się znaleźć rozwiązanie tego problemu? Mam dokładnie te same objawy.
Gani Simsek
Hej Gani, nie jestem pewien. Napisałem tutaj moje rozwiązanie „nie wiem, czy działa” serverfault.com/a/426599/111458 . Proszę wybaczyć moją spóźnioną odpowiedź. Jeśli nadal potrzebujesz rozwiązania, wypróbuj moją odpowiedź i daj mi / nam znać, czy zadziałało =)
Aurelin

Odpowiedzi:

7

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.exenarzę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.confpliku, aby odwoływał się do KDC jako kdc = 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.

Evan Anderson
źródło
(Cholera, przypadkowo usunąłem komentarz. Wygląda na to, że wciąż śpię) Cóż, więc mogę zapytać, czy by to zmienili, ale wątpię w to z powodu orgii. Struktura. I nie chodzi o to, że mój projekt jest bardzo ważny, więc .. Najpierw spróbuję zmodyfikować /etc/krb5.conf .. Dzięki. Btw, jakiś pomysł, dlaczego ten problem występuje tylko w IE, ale nie w Opera ani Firefox?
Aurelin
Próbowałem zmodyfikować /etc/krb5.conf, ale to wcale tego nie naprawia. Kolejną rzeczą, którą właśnie wymyśliłem, jest to, że twój link opisuje tylko rozwiązanie dla serwerów Win2k3, ale uruchamiamy Win2k8 RC2. Przepraszam, zapomniałem o tym wspomnieć.
Aurelin
Cóż .. Muszę powiedzieć, że to było trochę dziwne
Aurelin
2

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.

Złe żądanie Twoja przeglądarka wysłała żądanie, którego ten serwer nie mógł zrozumieć. > Rozmiar pola nagłówka żądania przekracza limit serwera. Cookie / n

Dean Flory
źródło
2
Brzmi dla mnie jak rozwiązanie „Microsoft”: Uruchom ponownie i mam nadzieję, że problem zniknie.
Colin 't Hart
1
@ Colin, niezależnie od tego, jak bardzo może to brzmieć jak odpowiedź „Microsoft”, wiele razy jest to dokładnie to , co jest wymagane. Podczas czyszczenia pamięci podręcznej przeglądarki wiele przeglądarek nie opróżnia pamięci podręcznej w pamięci, stąd potrzeba ponownego uruchomienia przeglądarki. Z pewnością dotyczy to wersji Maca Firefox, Chrome i Camino. Nigdy nie używam Safari, więc nie mogę komentować tego.
John Gardeniers
1

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ł.

Aurelin
źródło