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.

Originele productversie: Windows Server 2016
Origineel 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:

  1. Bereken de grootte van het Kerberos-token van de gebruiker met behulp van de formule die in het volgende artikel wordt beschreven:
    Problemen met Kerberos-verificatie wanneer een gebruiker tot veel groepen behoort.

  2. Stel de waarde van MaxFieldLength en MaxRequestBytes 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.

    Opmerking

    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 6.0 en hoger bevinden de registersleutels MaxFieldLength en MaxRequestBytes zich op 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.

Verwijzingen