Apache Bad Request "Размер поля заголовка запроса превышает лимит сервера" с Kerberos SSO

Я настраиваю единый вход для пользователей Active Directory через веб-сайт, работающий на Apache (Apache2 на SLES 11.1), и при тестировании с Firefox все работает нормально. Но когда я пытаюсь открыть сайт в Internet Explorer 8 (Windows 7), все, что я получаю, это

"Плохой запрос

Ваш браузер отправил запрос, который этот сервер не может понять.

Размер поля заголовка запроса превышает лимит сервера.

Авторизация: переговоры [ультра длинная строка]"

Мой vhost.cfg выглядит так:

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

Я также удостоверился, что куки удалены, и попробовал несколько меньших значений для LimitRequestFieldSize и LimitRequestLine.

Еще одна вещь, которая кажется мне странной, заключается в том, что даже при отладке LogLevel я не получу никаких записей об этом. Последняя строка журнала

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

У кого-нибудь есть идеи по этому поводу?

4 ответа

Моя интуиция говорит, что у вас очень большой токен безопасности, возможно, потому что пользователь является членом большого количества групп. Реализация AD Kerberos собирается предоставить Apache Сертификат атрибута привилегий (PAC) по умолчанию. Эта структура может быть большой, если пользователь является членом значительного числа групп. Вы можете использовать tokensz.exe инструмент, чтобы увидеть размер токена пользователя.

Если это проблема, вы можете изменить атрибут UserAccountControl учетной записи пользователя, чтобы предотвратить отправку PAC.

Возможно, вам удастся изменить ваш /etc/krb5.conf файл для ссылки на KDC как kdc = tcp/kdc.name.here, Эта проблема может возникнуть, если PAC приводит к тому, что токен слишком велик для дейтаграммы UDP, но принудительное взаимодействие с KDC с TCP также является возможным обходным путем.

Изменение этого значения для 1000 пользователей не составит труда для администраторов AD, если это решит вашу проблему.

Эта ошибка произошла на сайте Drupal 7 в Safari на Mac и я обнаружил, что закрытие окон браузера и очистка кеша браузера, выход из браузера, его открытие и перезагрузка страницы работали над устранением ошибки, которая только произошла это один раз.

Плохой запрос Ваш браузер отправил запрос, который этот сервер не может понять. 
> Размер поля заголовка запроса превышает лимит сервера. Cookie /n

Я нашел другое решение, хотя я не уверен, что оно действительно работает. Apache Docs заявляет, что для больших пакетов мне нужно установить LimitRequestFieldSize и / или LimitRequestLine.

Дело в том, что если вы хотите установить значение LimitRequestLine выше 8 КБ, вам придется изменить исходный код и перекомпилировать Apache, так как 8 КБ - это фиксированный maxSize ( http://httpd.apache.org/docs/2.2/mod/core.html).

Я не знаю точно, работает ли этот метод, потому что позже я переустановил apache из нашего собственного репозитория на втором сервере. Кажется, что это была другая версия пакета, так как проблема там не возникала.

В случае, если кто-то столкнется с этой проблемой с помощью mod_proxy_ajp, взгляните на: Начиная с какой версии Apache, LimitRequestFieldSize больше не жестко программируется до 8k max?

Другие вопросы по тегам