Partager via


Réponses HTTP 400 Requête incorrecte (en-tête de requête trop long) aux requêtes HTTP

Quand une requête HTTP nécessitant une authentification Kerberos est envoyée à un site web hébergé sur Internet Information Services (IIS) et configuré pour utiliser l’authentification Kerberos, l’en-tête de requête HTTP est très long. Cet article vous aide à contourner l’erreur HTTP 400 qui se produit quand l’en-tête de requête HTTP est trop long.

Version de produit d’origine : Windows Server 2016
Numéro de l’article d’origine dans la base de connaissances : 2020943

Symptômes

Une requête HTTP nécessitant l’authentification Kerberos est envoyée d’un navigateur à un site web hébergé sur IIS. Le site web est configuré pour utiliser l’authentification Kerberos. Toutefois, en lieu et place de la page web attendue, un message d’erreur similaire à celui ci-dessous s’affiche :

HTTP 400 - Requête incorrecte (en-tête de requête trop long)

Cette réponse peut être générée par n’importe quelle requête HTTP qui inclut Windows Remote Management (WinRM).

Cause

Ce problème peut se produire si l’utilisateur est membre de nombreux groupes d’utilisateurs Active Directory.

La requête HTTP adressée au serveur contient le jeton Kerberos dans l’en-tête WWW-Authenticate. Plus le nombre de groupes d’utilisateurs est important, plus la taille de l’en-tête augmente. Si la taille du paquet ou de l’en-tête HTTP dépasse les limites configurées sur le serveur, celui-ci peut rejeter la demande et envoyer un message d’erreur comme réponse.

Solution de contournement 1 : Réduire le nombre de groupes Active Directory

Diminuez le nombre de groupes Active Directory dont l’utilisateur est membre.

Solution de contournement 2 : Définir les entrées de Registre MaxFieldLength et MaxRequestBytes

Augmentez les paramètres des entrées de Registre MaxRequestBytes et MaxFieldLength sur le serveur afin que les en-têtes de requête de l’utilisateur ne dépassent pas ces valeurs. Pour déterminer les paramètres appropriés, utilisez les calculs suivants :

  1. Calculez la taille du jeton Kerberos de l’utilisateur à l’aide de la formule décrite dans l’article suivant :
    Problèmes liés à l’authentification Kerberos lorsqu’un utilisateur appartient à de nombreux groupes.

  2. Définissez la valeur des entrées MaxFieldLength et MaxRequestBytes sur le serveur sur 4/3 * J octets, où J correspond à la taille de jeton de l’utilisateur en octets. Le protocole HTTP encode le jeton Kerberos à l’aide du codage base64.

    Remarque

    Cette opération remplace tous les trois octets dans le jeton par quatre octets codés en base64. Les modifications apportées au Registre ne sont appliquées qu’après le redémarrage du service HTTP. En outre, vous devrez peut-être redémarrer tous les services associés, comme les services IIS.

Selon votre environnement d’application, vous pouvez également contourner ce problème en configurant le site web pour qu’il utilise Windows NT LAN Manager (NTLM) au lieu de Kerberos. Certains environnements d’application nécessitent l’authentification Kerberos pour la délégation. Nous estimons que l’authentification Kerberos est plus sécurisée que NTLM. Il est également recommandé de ne pas désactiver l’authentification Kerberos avant d’envisager les conséquences sur la sécurité et la délégation.

Informations supplémentaires

Par défaut, l’entrée de Registre MaxFieldLength n’existe pas. Cette entrée détermine la limite de taille maximale de chaque en-tête de requête HTTP. L’entrée de Registre MaxRequestBytes spécifie la limite supérieure pour la taille totale de la ligne de requête et des en-têtes. En règle générale, cette entrée de Registre est configurée avec l’entrée de Registre MaxRequestBytes. Si la valeur de MaxRequestBytes est inférieure à celle de MaxFieldLength, la valeur de MaxFieldLength est ajustée. Dans les environnements Active Directory étendus, les utilisateurs peuvent rencontrer des échecs d’ouverture de session si les valeurs de ces deux entrées ne sont pas définies sur une valeur suffisamment élevée.

Pour IIS 6.0 ou version ultérieure, les clés de Registre MaxRequestBytes et MaxFieldLength se trouvent dans la sous-clé suivante :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Définissez les valeurs des clés conformément au tableau suivant :

Nom Type de valeur Données de la valeur
MaxFieldLength DWORD (4/3 * J octets) + 200
MaxRequestBytes DWORD (4/3 * J octets) + 200

Vous pouvez également définir les clés de Registre sur leurs valeurs maximales, comme indiqué dans le tableau suivant. Tenez compte de toutes les conséquences potentielles sur la sécurité avant de modifier les paramètres du Registre.

Nom Type de valeur Données de la valeur
MaxFieldLength DWORD 65536 (déc.) ou 10000 (hex.)
MaxRequestBytes DWORD 16777216 (déc.) ou 1000000 (hex.)

Importante

La modification des clés de Registre ci-dessus doit être considérée comme étant extrêmement dangereuse. Ces clés permettent d’envoyer des paquets HTTP plus volumineux à IIS. Toutefois, cela peut accroître l’utilisation de la mémoire par Http.sys. Par conséquent, ces modifications peuvent augmenter la vulnérabilité de l’ordinateur aux attaques malveillantes.

Si l’entrée MaxFieldLength est définie sur la valeur maximale de 64 Ko, la valeur de Registre MaxTokenSize doit être définie sur 3/4 * 64 = 48 Ko. Pour plus d’informations sur le paramètre MaxTokenSize, consultez l’article Problèmes liés à l’authentification Kerberos lorsqu’un utilisateur appartient à de nombreux groupes.

References