Antworten der Form „HTTP 400 Ungültige Anforderung (Anforderungsheader zu lang)“ auf HTTP-Anfragen

Wenn eine HTTP-Anforderung, die eine Kerberos-Authentifizierung benötigt, an eine Website gesendet wird, die auf Internetinformationsdiensten (IIS) gehostet wird und für die Verwendung der Kerberos-Authentifizierung konfiguriert ist, wäre der HTTP-Anforderungsheader sehr lang. Dieser Artikel hilft Ihnen, den HTTP-400-Fehler zu umgehen, der auftritt, wenn der HTTP-Anforderungsheader zu lang ist.

Ursprüngliche Produktversion: Windows Server 2016
Ursprüngliche KB-Nummer: 2020943

Problembeschreibung

Eine HTTP-Anforderung, die eine Kerberos-Authentifizierung benötigt, wird von einem Browser an eine Website gesendet, die auf IIS gehostet wird. Die Website ist für die Verwendung der Kerberos-Authentifizierung konfiguriert. Anstatt die erwartete Webseite zu erhalten, erhalten Sie jedoch eine Fehlermeldung, die der folgenden ähnelt:

HTTP 400 – Ungültige Anforderung (Anforderungsheader zu lang)

Diese Antwort kann von jeder HTTP-Anforderung generiert werden, die die Windows-Remoteverwaltung (WinRM) umfasst.

Ursache

Dieses Problem kann auftreten, wenn der Benutzer Mitglied vieler Active Directory-Benutzergruppen ist.

Die HTTP-Anforderung an den Server enthält das Kerberos-Token im WWW-Authenticate-Header. Die Größe des Headers nimmt mit der Anzahl der Benutzergruppen zu. Wenn der HTTP-Header oder die Paketgröße über die auf dem Server konfigurierten Grenzwerte hinausgeht, kann der Server die Anforderung ablehnen und als Antwort eine Fehlermeldung senden.

Problemumgehung 1: Verringern der Anzahl von Active Directory-Gruppen

Verringern Sie die Anzahl der Active Directory-Gruppen, in denen der Benutzer Mitglied ist.

Problemumgehung 2: Festlegen von Registrierungseinträgen für MaxFieldLength und MaxRequestBytes

Erhöhen Sie die Einstellungen für die Registrierungseinträge MaxFieldLength und MaxRequestBytes auf dem Server, sodass die Anforderungsheader des Benutzers diese Werte nicht mehr überschreiten. Verwenden Sie die folgenden Berechnungen, um die angemessenen Einstellungen zu ermitteln:

  1. Berechnen Sie die Größe des Kerberos-Tokens des Benutzers mithilfe der im folgenden Artikel beschriebenen Formel:
    Probleme mit der Kerberos-Authentifizierung, wenn ein Benutzer zu vielen Gruppen gehört

  2. Legen Sie den Wert von MaxFieldLength und MaxRequestBytes auf dem Server auf 4/3 * T Bytes fest, wobei T die Tokengröße des Benutzers in Bytes ist. HTTP codiert das Kerberos-Token mit base64-Codierung.

    Hinweis

    Dadurch werden alle drei Bytes im Token durch vier base64-codierte Bytes ersetzt. Änderungen, die an der Registrierung vorgenommen werden, werden erst wirksam, wenn Sie den HTTP-Dienst neu starten. Darüber hinaus müssen Sie möglicherweise alle zugehörigen Dienste neu starten, z. B. IIS-Dienste.

Je nach Anwendungsumgebung können Sie dieses Problem auch umgehen, indem Sie die Website so konfigurieren, dass sie Windows NT LAN Manager (NTLM) anstelle von Kerberos verwendet. In einigen Anwendungsumgebungen muss für die Delegierung die Kerberos-Authentifizierung verwendet werden. Wir betrachten die Kerberos-Authentifizierung als sicherer als NTLM. Außerdem wird empfohlen, die Kerberos-Authentifizierung nicht zu deaktivieren, bevor Sie die Auswirkungen auf Sicherheit und Delegierung berücksichtigen.

Weitere Informationen

Standardmäßig gibt es keinen Registrierungseintrag MaxFieldLength. Dieser Eintrag gibt die maximale Größenbeschränkung für jeden HTTP-Anforderungsheader an. Der Registrierungseintrag MaxRequestBytes gibt die Obergrenze für die Gesamtgröße der Anforderungszeile und der Header an. In der Regel wird dieser Registrierungseintrag zusammen mit dem Registrierungseintrag MaxRequestBytes konfiguriert. Wenn der Wert von MaxRequestBytes niedriger ist als der Wert von MaxFieldLength, wird der Wert von MaxFieldLength angepasst. In großen Active Directory-Umgebungen können Anmeldefehler auftreten, wenn die Werte für beide Einträge nicht auf einen ausreichend hohen Wert festgelegt sind.

Für IIS 6.0 und höher befinden sich die Registrierungsschlüssel MaxFieldLength und MaxRequestBytes unter dem folgenden Unterschlüssel:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Legen Sie die Schlüsselwerte wie in der folgenden Tabelle angegeben fest:

Name Werttyp Daten des Wertes
MaxFieldLength DWORD (4/3 * T Bytes) + 200
MaxRequestBytes DWORD (4/3 * T Bytes) + 200

Sie können die Registrierungsschlüssel auch auf ihre Maximalwerte festlegen, wie in der nächsten Tabelle dargestellt. Berücksichtigen Sie alle potenziellen Sicherheitsauswirkungen, bevor Sie Änderungen an den Registrierungseinstellungen vornehmen.

Name Werttyp Daten des Wertes
MaxFieldLength DWORD 65536 (Dez) oder 10000 (Hex)
MaxRequestBytes DWORD 16777216 (Dez) oder 1000000 (Hex)

Wichtig

Das Ändern dieser Registrierungsschlüssel sollte als äußerst gefährlich angesehen werden. Mit diesen Schlüsseln können größere HTTP-Pakete an IIS gesendet werden. Dies kann wiederum dazu führen, dass Http.sys mehr Arbeitsspeicher belegt. Daher können solche Änderungen die Sicherheitsanfälligkeit des Computers gegenüber böswilligen Angriffen erhöhen.

Wenn der Wert von MaxFieldLength auf den Maximalwert von 64 KB festgelegt ist, sollte der Registrierungswert von MaxTokenSize auf 3/4 * 64 = 48 KB festgelegt werden. Weitere Informationen zur Einstellung MaxTokenSize finden Sie unter Probleme mit der Kerberos-Authentifizierung, wenn ein Benutzer zu vielen Gruppen gehört.

References