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:
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.Establezca el valor de
MaxFieldLength
yMaxRequestBytes
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de