HTTP 400 Felaktig begäran (begärandehuvudet är för lång) svarar på HTTP-begäranden

När en HTTP-begäran som behöver Kerberos-autentisering skickas till en webbplats som finns på IIS (Internet Information Services) och är konfigurerad för att använda Kerberos-autentisering, blir HTTP-begärandehuvudet mycket långt. Den här artikeln hjälper dig att kringgå det HTTP 400-fel som uppstår när HTTP-begärandehuvudet är för långt.

Ursprunglig produktversion: Windows Server 2016
Original-KB-nummer: 2020943

Symptom

En HTTP-begäran som behöver Kerberos-autentisering skickas från en webbläsare till en webbplats som finns på IIS. Webbplatsen är konfigurerad för att använda Kerberos-autentisering. Men i stället för att ta emot den förväntade webbsidan får du ett felmeddelande som liknar följande:

HTTP 400 – Felaktig begäran (begärandehuvudet är för långt)

Det här svaret kan genereras av alla HTTP-begäranden som innehåller Windows Remote Management (WinRM).

Orsak

Det här problemet kan inträffa om användaren är medlem i många Active Directory-användargrupper.

HTTP-begäran till servern innehåller Kerberos-token i WWW-Authenticate huvudet. Sidhuvudstorleken ökar i takt med med antalet användargrupper. Om HTTP-huvudet eller paketstorleken överskrider de gränser som har konfigurerats på servern kan servern avvisa begäran och skicka ett felmeddelande som svar.

Lösning 1: Minska antalet Active Directory-grupper

Minska antalet Active Directory-grupper som användaren är medlem i.

Lösning 2: Ange registerposterna MaxFieldLength och MaxRequestBytes

Öka inställningarna för registerposterna MaxFieldLength och MaxRequestBytes på servern så att användarens begärandehuvuden inte överskrider dessa värden. Använd följande beräkningar för att fastställa lämpliga inställningar:

  1. Beräkna storleken på användarens Kerberos-token med hjälp av formeln som beskrivs i följande artikel:
    Problem med Kerberos-autentisering när en användare tillhör många grupper.

  2. Ange värdet för MaxFieldLength och MaxRequestBytes på servern till 4/3 * T byte, där T är användarens tokenstorlek i byte. HTTP kodar Kerberos-token med hjälp av base64-kodning.

    Obs!

    Detta ersätter var tredje byte i token med fyra base64-kodade byte. Ändringar som görs i registret börjar inte gälla förrän du startar om HTTP-tjänsten. Dessutom kan du behöva starta om relaterade tjänster, till exempel IIS-tjänster.

Beroende på din programmiljö kan du också kringgå det här problemet genom att konfigurera webbplatsen så att den använder Windows NT LAN Manager (NTLM) i stället för Kerberos. Vissa programmiljöer kräver att Kerberos-autentisering används för delegering. Vi anser att Kerberos-autentisering är säkrare än NTLM. Och vi rekommenderar att du inte inaktiverar Kerberos-autentisering innan du överväger säkerhets- och delegeringsförgreningarna.

Mer information

Som standard finns det ingen MaxFieldLength registerpost. Den här posten anger den maximala storleksgränsen för varje HTTP-begärandehuvud. Registerposten MaxRequestBytes anger den övre gränsen för den totala storleken på Begäranraden och rubrikerna. Den här registerposten konfigureras vanligtvis tillsammans med MaxRequestBytes registerposten. Om värdet MaxRequestBytes är lägre än värdet MaxFieldLength, justeras värdet MaxFieldLength. I stora Active Directory-miljöer kan användare uppleva inloggningsfel om värdena för båda dessa poster inte är inställda på ett tillräckligt högt värde.

För IIS 6.0 och senare finns registernycklarna MaxFieldLength och MaxRequestBytes på följande undernyckel:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Ange nyckelvärdena enligt följande tabell:

Namn Värdetyp Värdedata
MaxFieldLength DWORD (4/3 * T byte) + 200
MaxRequestBytes DWORD (4/3 * T byte) + 200

Du kan också ange registernycklarna till deras högsta värden, som du ser i nästa tabell. Överväg alla potentiella säkerhetsförgreningar innan du gör några ändringar i registerinställningarna.

Namn Värdetyp Värdedata
MaxFieldLength DWORD 65536 (Dec) eller 10000 (Hex)
MaxRequestBytes DWORD 16777216 (Dec) eller 1000000 (Hex)

Viktigt

Att ändra dessa registernycklar bör anses vara extremt farligt. Med dessa nycklar kan större HTTP-paket skickas till IIS. Detta kan i sin tur leda till att Http.sys använder mer minne. Därför kan sådana ändringar öka datorns sårbarhet för skadliga attacker.

Om MaxFieldLength är inställt på det maximala värdet på 64 kB MaxTokenSize ska registervärdet anges till 3/4 * 64 = 48 kB. Mer information om MaxTokenSize inställningen finns i Problem med Kerberos-autentisering när en användare tillhör många grupper.

Referenser