HTTP 400 Bad Request (Request Header too long) responses to HTTP requests

Dieser Artikel hilft Ihnen bei der Behebung des HTTP 400-Fehlers, der auftritt, wenn eine Hypertext Transfer Protocol (HTTP)-Anforderung, die die Kerberos-Authentifizierung benötigt, von einem Browser an eine Website gesendet wird, die auf Microsoft-Internetinformationsdienste (IIS) gehostet wird und für die Verwendung der Kerberos-Authentifizierung konfiguriert ist.

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

Problembeschreibung

Eine HTTP-Anforderung, die die Kerberos-Authentifizierung benötigt, wird von einem Browser an eine Website gesendet, die in 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 beliebigen HTTP-Anforderung generiert werden, die die Windows Remote Management (WinRM) enthält.

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 Kopfzeilengröße nimmt zusammen mit der Anzahl der Benutzergruppen zu. Wenn die Größe des HTTP-Headers oder -Pakets über die auf dem Server konfigurierten Grenzwerte hinaus anwächst, kann der Server die Anforderung ablehnen und eine Fehlermeldung als Antwort senden.

Problemumgehung 1: Verringern der Anzahl der Active Directory-Gruppen

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

Problemumgehung 2: Festlegen der Registrierungseinträge "MaxFieldLength" und "MaxRequestBytes"

Erhöhen Sie die Einstellungen für die Registrierungseinträge auf dem Server, damit die Anforderungsheader des Benutzers MaxFieldLength MaxRequestBytes diese Werte nicht überschreiten. Verwenden Sie die folgenden Berechnungen, um die entsprechenden 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 und auf dem Server auf MaxFieldLength 4/3 * T Bytes, wobei T die Tokengröße des Benutzers MaxRequestBytes in Byte ist. HTTP codiert das Kerberos-Token mithilfe der Base64-Codierung.

    Hinweis

    Dadurch werden alle drei Bytes im Token durch vier base64-codierte Bytes ersetzt. Änderungen an der Registrierung 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 beheben, indem Sie die Website für die Verwendung von Windows NT LAN Manager (NTLM) anstelle von Kerberos konfigurieren. Einige Anwendungsumgebungen erfordern die Verwendung der Kerberos-Authentifizierung für die Delegierung. 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 ist kein MaxFieldLength Registrierungseintrag vorhanden. Dieser Eintrag gibt die maximale Größenbeschränkung für jeden HTTP-Anforderungsheader an. Der Registrierungseintrag gibt den oberen Grenzwert für die Gesamtgröße der Anforderungszeile und MaxRequestBytes der Header an. In der Regel wird dieser Registrierungseintrag zusammen mit dem MaxRequestBytes Registrierungseintrag konfiguriert. Wenn der MaxRequestBytes Wert niedriger als der Wert MaxFieldLength ist, wird der Wert MaxFieldLength angepasst. In großen Active Directory-Umgebungen kann es zu Anmeldefehlern kommen, 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 und registrierungsschlüssel MaxFieldLength MaxRequestBytes unter dem folgenden Unterschlüssel:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Legen Sie die Schlüsselwerte wie in der folgenden Tabelle dargestellt ein:

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 Sicherheitsrisiken, bevor Sie Änderungen an den Registrierungseinstellungen vornehmen.

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

Wichtig

Das Ändern dieser Registrierungsschlüssel sollte als äußerst gefährlich betrachtet werden. Mit diesen Schlüsseln können größere HTTP-Pakete an IIS gesendet werden. Dies kann wiederum dazu führen, Http.sys mehr Arbeitsspeicher zu verwenden. Daher können solche Änderungen die Anfälligkeit des Computers für böswillige Angriffe erhöhen.

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

Informationsquellen