Solicitud incorrecta de Apache "El tamaño de un campo de encabezado de solicitud excede el límite del servidor" con Kerberos SSO

9

Estoy configurando un SSO para usuarios de Active Directory a través de un sitio web que se ejecuta en un Apache (Apache2 en SLES 11.1), y cuando pruebo con Firefox todo funciona bien. Pero cuando trato de abrir el sitio web en Internet Explorer 8 (Windows 7), todo lo que obtengo es

"Solicitud incorrecta

Su navegador envió una solicitud que este servidor no pudo entender.

El tamaño de un campo de encabezado de solicitud excede el límite del servidor.

Autorización: Negociar [cadena ultra larga] "

Mi vhost.cfg se ve así:

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

También me aseguré de que las cookies se eliminen y probé varios valores más pequeños para LimitRequestFieldSize y LimitRequestLine.

Otra cosa que me parece extraña es que incluso con la depuración LogLevel no obtendré ningún registro sobre esto. La última línea del registro es

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

¿Alguien tiene una idea sobre eso?

Aurelin
fuente
¿Has podido encontrar una solución a este problema? Estoy teniendo exactamente los mismos síntomas.
Gani Simsek
Hola Gani, no estoy seguro. Escribí mi solución "no estoy seguro si funciona" aquí serverfault.com/a/426599/111458 . Por favor, disculpe mi respuesta tardía. Si aún necesita la solución, pruebe mi respuesta y avíseme si funcionó =)
Aurelin

Respuestas:

7

Mi instinto dice que tienes un token de seguridad muy grande, posiblemente porque el usuario es miembro de una gran cantidad de grupos. La implementación de AD Kerberos proporcionará a Apache un Certificado de atributo de privilegio (PAC) de forma predeterminada. Esta estructura puede ser grande si el usuario es miembro de un número significativo de grupos. Puede usar la tokensz.exeherramienta para ver el tamaño del token del usuario.

Si este es el problema, puede modificar el atributo UserAccountControl de la cuenta del usuario para evitar que se envíe el PAC.

Es posible que pueda modificar su /etc/krb5.confarchivo para hacer referencia al KDC como kdc = tcp/kdc.name.here. Este problema puede ocurrir si el PAC hace que el token sea demasiado grande para un datagrama UDP, pero forzar la comunicación al KDC con TCP también es una posible solución alternativa.

Cambiar ese valor en 1,000 usuarios no es difícil para los administradores de AD si resuelve su problema.

Evan Anderson
fuente
(Maldita sea, borré accidentalmente el comentario. Parece que todavía estoy durmiendo) Bueno, entonces puedo preguntarles si cambiarían eso, pero lo dudo debido a la organización. estructura. Y no es que mi proyecto sea súper importante, así que ... Primero intentaré la modificación de /etc/krb5.conf ... Gracias. Por cierto, ¿alguna idea de por qué este problema solo ocurre en IE, pero no en Opera ni Firefox?
Aurelin
Intenté modificar /etc/krb5.conf, pero eso no lo soluciona en absoluto. Otra cosa que acabo de descubrir es que su enlace describe solo una solución para los servidores Win2k3, pero ejecutamos Win2k8 RC2. Olvidé mencionar eso, lo siento.
Aurelin
Bueno ... tengo que decir que fue un poco raro
Aurelin
2

Tuve este error en un sitio de Drupal 7 en Safari en Mac y descubrí que cerrar las ventanas del navegador y borrar el caché del navegador, cerrar el navegador, abrirlo nuevamente y volver a cargar la página funcionó para descontinuar el error que solo sucedió Esta única vez.

Solicitud incorrecta Su navegador envió una solicitud que este servidor no pudo entender. > El tamaño de un campo de encabezado de solicitud excede el límite del servidor. Cookie / n

Dean Flory
fuente
2
A mí me parece una solución "Microsoft": reinicie y espero que el problema desaparezca.
Colin 't Hart
1
@Colin, independientemente de cuánto suene esto como una respuesta de "Microsoft", muchas veces eso es exactamente lo que se requiere. Al borrar el caché de un navegador, muchos navegadores no pueden vaciar el caché en memoria, de ahí la necesidad de reiniciar el navegador. Ciertamente se aplica a las versiones para Mac de Firefox, Chrome y Camino. Nunca uso Safari, así que no puedo comentar sobre eso.
John Gardeniers
1

Encontré otra solución, aunque no estoy seguro de si realmente funciona. Apache Docs afirma que para paquetes grandes tendré que establecer LimitRequestFieldSize y / o LimitRequestLine.

El asunto es que si desea establecer el valor de LimitRequestLine en algo más alto que 8 KB, entonces tendrá que modificar la fuente y recompilar Apache, ya que 8 KB es el tamaño máximo fijo ( http://httpd.apache.org/docs/ 2.2 / mod / core.html # limitrequestline ).

No estoy seguro si este método funciona, porque reinstalé apache desde nuestro propio repositorio en un segundo servidor más tarde. Parece que esta era una versión de paquete diferente ya que el problema no ocurrió allí.

Aurelin
fuente