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:
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örtLegen Sie den Wert von
MaxFieldLength
undMaxRequestBytes
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.Notiz
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 | Wertdaten |
---|---|---|
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 | Wertdaten |
---|---|---|
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.