Respuestas HTTP 400 de solicitud incorrecta (Encabezado de solicitud demasiado largo) a las solicitudes HTTP

Cuando se envía una solicitud HTTP que necesita autenticación Kerberos a un sitio web hospedado en Internet Information Services (IIS) y configurado para usar la autenticación Kerberos, el encabezado de solicitud HTTP sería muy largo. Este artículo le ayuda a solucionar el error HTTP 400 que se produce cuando el encabezado de solicitud HTTP es demasiado largo.

Versión del producto original: Windows Server 2016
Número KB original: 2020943

Síntomas

Una solicitud HTTP que necesita autenticación Kerberos se envía desde un explorador a un sitio web hospedado en IIS. El sitio web está configurado para usar la autenticación Kerberos. Sin embargo, en lugar de recibir la página web esperada, obtendrá un mensaje de error similar al siguiente:

HTTP 400: solicitud incorrecta (Encabezado de solicitud demasiado largo)

Esta respuesta puede generarse mediante cualquier solicitud HTTP que incluya Administración remota de Windows (WinRM).

Causa

Este problema puede producirse si el usuario es miembro de muchos grupos de usuarios de Active Directory.

La solicitud HTTP al servidor contiene el token de Kerberos en el encabezado WWW-Authenticate. El tamaño del encabezado aumenta junto con el número de grupos de usuarios. Si el tamaño del encabezado HTTP o del paquete aumenta más allá de los límites configurados en el servidor, este puede rechazar la solicitud y enviar un mensaje de error como respuesta.

Solución alternativa 1: Reducir el número de grupos de Active Directory

Reduzca el número de grupos de Active Directory de los que es miembro el usuario.

Solución alternativa 2: Establecer entradas del Registro MaxFieldLength y MaxRequestBytes

Aumente la configuración de las entradas MaxFieldLength y MaxRequestBytes del Registro en el servidor para que los encabezados de solicitud del usuario no superen estos valores. Para determinar la configuración adecuada, use los cálculos siguientes:

  1. Calcule el tamaño del token de Kerberos del usuario mediante la fórmula descrita en el artículo siguiente:
    Problemas con la autenticación Kerberos cuando un usuario pertenece a varios grupos.

  2. Establezca el valor de MaxFieldLength y MaxRequestBytes en el servidor en 4/3 * T bytes, donde T es el tamaño del token del usuario en bytes. HTTP codifica el token de Kerberos mediante la codificación base64.

    Nota:

    Esto reemplaza cada tres bytes del token por cuatro bytes codificados en base64. Los cambios en el Registro no surten efecto hasta que reinicie el servicio HTTP. Además, es posible que tenga que reiniciar los servicios relacionados, como los de IIS.

En función del entorno de la aplicación, también puede solucionar este problema configurando el sitio web para que use Windows NT LAN Manager (NTLM) en lugar de Kerberos. Algunos entornos de aplicación requieren que se use la autenticación Kerberos para la delegación. Consideramos que la autenticación Kerberos es más segura que NTLM. Además, se recomienda no deshabilitarla antes de tener en cuenta las ramificaciones de seguridad y delegación.

Más información

De forma predeterminada, no hay ninguna entrada del Registro MaxFieldLength. Esta entrada especifica el límite de tamaño máximo de cada encabezado de solicitud HTTP. La entrada del Registro MaxRequestBytes especifica el límite superior para el tamaño total de la línea de solicitud y los encabezados. Normalmente, esta entrada del Registro se configura junto con la entrada del Registro MaxRequestBytes. Si el valor MaxRequestBytes es menor que el valor MaxFieldLength, MaxFieldLength se ajusta. En entornos de Active Directory grandes, los usuarios pueden experimentar errores de inicio de sesión si los valores de ambas entradas no están establecidos en un valor suficientemente alto.

Para IIS 6.0 y versiones posteriores, las claves del Registro MaxFieldLength y MaxRequestBytes se encuentran en la subclave siguiente:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Defina los valores de las claves como se indica en la siguiente tabla:

Name Tipo de valor Datos de valor
MaxFieldLength DWORD (4/3 * T bytes) + 200
MaxRequestBytes DWORD (4/3 * T bytes) + 200

También puede establecer las claves del Registro en sus valores máximos, como se muestra en la tabla siguiente. Tenga en cuenta todas las posibles ramificaciones de seguridad antes de hacer cambios en la configuración del Registro.

Name Tipo de valor Datos de valor
MaxFieldLength DWORD 65536 (dec) o 10000 (hex)
MaxRequestBytes DWORD 16777216 (dec) o 1000000 (hex)

Importante

El cambio de estas claves del Registro debe considerarse extremadamente peligroso. Estas claves permiten enviar paquetes HTTP más grandes a IIS. Esto, a su vez, puede hacer que Http.sys use más memoria. Por lo tanto, estos cambios pueden aumentar la vulnerabilidad del equipo ante ataques malintencionados.

Si MaxFieldLength se establece en su valor máximo de 64 KB, el valor del Registro MaxTokenSize debe establecerse en 3/4 * 64 = 48 KB. Para obtener más información sobre la configuración MaxTokenSize, vea Problemas con la autenticación Kerberos cuando un usuario pertenece a varios grupos.

Referencias