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:
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.Ange värdet för
MaxFieldLength
ochMaxRequestBytes
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för