HTTP 400 Ongeldige aanvraag (aanvraagheader te lang) antwoorden op HTTP-aanvragen
Wanneer een HTTP-aanvraag waarvoor Kerberos-verificatie vereist is, wordt verzonden naar een website die wordt gehost op Internet Information Services (IIS) en is geconfigureerd om Kerberos-verificatie te gebruiken, zou de header van het HTTP-aanvraag erg lang zijn. Dit artikel helpt u bij het omzeilen van de HTTP 400-fout die optreedt wanneer de HTTP-aanvraagheader te lang is.
Oorspronkelijke productversie: Windows Server 2016
Oorspronkelijk KB-nummer: 2020943
Symptomen
Een HTTP-aanvraag die Kerberos-verificatie nodig heeft, wordt vanuit een browser verzonden naar een website die wordt gehost op IIS. De website is geconfigureerd om Kerberos-verificatie te gebruiken. In plaats van de verwachte webpagina te ontvangen, ontvangt u echter een foutbericht dat lijkt op de volgende:
HTTP 400 - Ongeldige aanvraag (aanvraagheader te lang)
Dit antwoord kan worden gegenereerd door elk HTTP-aanvraag dat Windows Remote Management (WinRM) bevat.
Oorzaak
Dit probleem kan optreden als de gebruiker lid is van veel Active Directory-gebruikersgroepen.
Het HTTP-aanvraag aan de server bevat het Kerberos-token in de WWW-Authenticate
-header. De headergrootte neemt toe met het aantal gebruikersgroepen. Als de HTTP-header of pakketgrootte groter wordt dan de limieten die op de server zijn geconfigureerd, kan de server de aanvraag afwijzen en een foutbericht verzenden als antwoord.
Tijdelijke oplossing 1: Het aantal Active Directory-groepen verlagen
Verminder het aantal Active Directory-groepen waarvan de gebruiker lid is.
Tijdelijke oplossing 2: Registervermeldingen MaxFieldLength en MaxRequestBytes instellen
Verhoog de instellingen voor de registervermeldingen MaxFieldLength
en MaxRequestBytes
op de server zodat de aanvraagheaders van de gebruiker deze waarden niet overschrijden. Gebruik de volgende berekeningen om de juiste instellingen te bepalen:
Bereken de grootte van het Kerberos-token van de gebruiker met behulp van de formule die wordt beschreven in Problemen met Kerberos-verificatie wanneer een gebruiker deel uitmaakt van veel groepen.
Stel de waarde van
MaxFieldLength
enMaxRequestBytes
op de server in op 4/3 * T-bytes, waarbij T de tokengrootte van de gebruiker is in bytes. HTTP codeert het Kerberos-token met behulp van base64-codering.Notitie
Dit vervangt elke drie bytes in het token door vier base64-gecodeerde bytes. Wijzigingen die in het register worden aangebracht, worden pas van kracht nadat u de HTTP-service opnieuw hebt opgestart. Daarnaast moet u mogelijk alle gerelateerde services, zoals IIS-services, opnieuw starten.
Afhankelijk van uw toepassingsomgeving kunt u dit probleem ook omzeilen door de website te configureren voor gebruik van Windows NT LAN Manager (NTLM) in plaats van Kerberos. Sommige toepassingsomgevingen vereisen dat Kerberos-verificatie wordt gebruikt voor delegatie. We beschouwen Kerberos-verificatie als veiliger dan NTLM. En we raden u aan Kerberos-verificatie niet uit te schakelen voordat u de beveiligings- en delegatiegevolgen in overweging neemt.
Meer informatie
Standaard is er geen MaxFieldLength
registervermelding. Deze vermelding geeft de maximale groottelimiet van elke HTTP-aanvraagheader op. De MaxRequestBytes
registervermelding geeft de bovengrens op voor de totale grootte van de aanvraagregel en de headers. Meestal wordt deze registervermelding samen met de MaxRequestBytes
registervermelding geconfigureerd. Als de MaxRequestBytes
waarde lager is dan de MaxFieldLength
waarde, wordt de MaxFieldLength
waarde aangepast. In grote Active Directory-omgevingen kunnen gebruikers aanmeldingsfouten ondervinden als de waarden voor beide vermeldingen niet voldoende hoog zijn ingesteld.
Voor IIS-versies die worden geleverd met Windows Server 2016 en hoger, bevinden de MaxFieldLength
en MaxRequestBytes
registersleutels zich in de volgende subsleutel:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
Stel de sleutelwaarden in zoals weergegeven in de volgende tabel:
Naam | Waardetype: | Waardegegevens |
---|---|---|
MaxFieldLength | DWORD | (4/3 * T-bytes) + 200 |
MaxRequestBytes | DWORD | (4/3 * T-bytes) + 200 |
U kunt de registersleutels ook instellen op de maximumwaarden, zoals wordt weergegeven in de volgende tabel. Houd rekening met alle mogelijke beveiligingsproblemen voordat u wijzigingen aanbrengt in de registerinstellingen.
Naam | Waardetype: | Waardegegevens |
---|---|---|
MaxFieldLength | DWORD | 65536 (dec) of 10000 (hex) |
MaxRequestBytes | DWORD | 16777216 (dec) of 1000000 (hex) |
Belangrijk
Het wijzigen van deze registersleutels moet als extreem gevaarlijk worden beschouwd. Met deze sleutels kunnen grotere HTTP-pakketten naar IIS worden verzonden. Dit kan er op zijn beurt toe leiden dat Http.sys meer geheugen gebruikt. Dergelijke wijzigingen kunnen daarom de kwetsbaarheid van de computer voor kwaadaardige aanvallen vergroten.
Als MaxFieldLength
is ingesteld op de maximale waarde van 64 KB, moet de registerwaarde MaxTokenSize
worden ingesteld op 3/4 * 64 = 48 KB. Raadpleeg Problemen met Kerberos-verificatie wanneer een gebruiker tot veel groepen behoort voor meer informatie over de instelling MaxTokenSize
.