Condividi tramite


Risposte HTTP 400 "richiesta non valida" (intestazione della richiesta troppo lunga) alle richieste HTTP

Quando una richiesta HTTP che richiede l'autenticazione Kerberos viene inviata a un sito Web ospitato in Internet Information Services (IIS) ed è configurata per l'utilizzo dell'autenticazione Kerberos, l'intestazione della richiesta HTTP sarà molto lunga. Questo articolo consente di risolvere l'errore HTTP 400 che si verifica quando l'intestazione della richiesta HTTP è troppo lunga.

Versione originale del prodotto: Windows Server 2016
Numero KB originale: 2020943

Sintomi

Una richiesta HTTP che richiede l'autenticazione Kerberos viene inviata da un browser a un sito Web ospitato in IIS. Il sito Web è configurato per l'utilizzo dell'autenticazione Kerberos. Tuttavia, anziché ricevere la pagina Web prevista, viene visualizzato un messaggio di errore simile al seguente:

HTTP 400 - Richiesta non valida (Intestazione della richiesta troppo lunga)

Questa risposta può essere generata da qualsiasi richiesta HTTP che include Gestione remota Windows (WinRM).

Causa

Questo problema può verificarsi se l'utente è membro di molti gruppi di utenti di Active Directory.

La richiesta HTTP al server contiene il token Kerberos nell'intestazione WWW-Authenticate. Le dimensioni dell'intestazione aumentano insieme al numero di gruppi di utenti. Se le dimensioni dell'intestazione HTTP, oppure del pacchetto, aumentano oltre i limiti configurati nel server, il server può rifiutare la richiesta e inviare come risposta un messaggio di errore.

Soluzione alternativa 1: ridurre il numero di gruppi di Active Directory

Ridurre il numero di gruppi di Active Directory di cui l'utente è membro.

Soluzione alternativa 2: impostare le voci del Registro di sistema MaxFieldLength e MaxRequestBytes

Aumentare le impostazioni per le voci del Registro di sistema MaxFieldLength e MaxRequestBytes nel server in modo che le intestazioni della richiesta dell'utente non superino questi valori. Per determinare le impostazioni appropriate, utilizzare i calcoli seguenti:

  1. Calcolare le dimensioni del token Kerberos dell'utente usando la formula descritta in Problemi di autenticazione Kerberos quando un utente appartiene a molti gruppi.

  2. Impostare il valore di MaxFieldLength e MaxRequestBytes nel server su 4/3 x T byte, dove T è la dimensione del token dell'utente in byte. HTTP codifica il token Kerberos utilizzando la codifica base64.

    Note

    Questo sostituisce ogni tre byte nel token con quattro byte con codifica base64. Le modifiche apportate al Registro di sistema non diventano effettive fino a quando non si riavvia il servizio HTTP. Potrebbe inoltre essere necessario riavviare tutti i servizi correlati, ad esempio i servizi IIS.

A seconda dell'ambiente dell'applicazione, è anche possibile risolvere questo problema configurando il sito Web in modo che utilizzi Windows NT LAN Manager (NTLM) anziché Kerberos. Alcuni ambienti dell'applicazione richiedono l'utilizzo dell'autenticazione Kerberos per la delega. L'autenticazione Kerberos è considerata più sicura di NTLM. È inoltre consigliabile non disabilitare l'autenticazione Kerberos prima di considerare le implicazioni relative alla sicurezza e alla delega.

Ulteriori informazioni

Per impostazione predefinita, la voce MaxFieldLength non è presente nel Registro di sistema. Questa voce specifica il limite massimo di dimensioni di ogni intestazione della richiesta HTTP. La voce MaxRequestBytes del Registro di sistema specifica il limite massimo per le dimensioni totali della riga e delle intestazioni della richiesta. In genere, questa voce del Registro di sistema viene configurata insieme alla voce del Registro di sistema MaxRequestBytes. Se il valore MaxRequestBytes è inferiore al valore MaxFieldLength, viene regolato il valore MaxFieldLength. Negli ambienti Active Directory di grandi dimensioni, gli utenti possono riscontrare errori di accesso se i valori per entrambe queste voci non sono impostati su un valore sufficientemente elevato.

Per le versioni iis fornite con Windows Server 2016 e versioni successive, le MaxFieldLength chiavi del Registro di sistema e MaxRequestBytes si trovano nella sottochiave seguente:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Impostare i valori chiave nel modo illustrato nella tabella seguente:

Nome Tipo di valore Dati valore
MaxFieldLength DWORD (4/3 x T byte) + 200
MaxRequestBytes DWORD (4/3 x T byte) + 200

È anche possibile impostare le chiavi del Registro di sistema sui valori massimi, nel modo illustrato nella tabella successiva. Prima di apportare modifiche alle impostazioni del Registro di sistema, prendere in considerazione tutte le potenziali implicazioni relative alla sicurezza.

Nome Tipo di valore Dati valore
MaxFieldLength DWORD 65536 (decimale) o 10000 (esadecimale)
MaxRequestBytes DWORD 16777216 (dec) o 1000000 (esadecimale)

Importante

La modifica di queste chiavi del Registro di sistema deve essere considerata estremamente pericolosa. Queste chiavi consentono di inviare a IIS pacchetti HTTP di dimensioni maggiori. Questo, a sua volta, può determinare che Http.sys utilizzi una maggiore memoria. Pertanto, tali modifiche possono aumentare la vulnerabilità del computer agli attacchi dannosi.

Se MaxFieldLength è impostato sul valore massimo di 64 KB, il valore del Registro di sistema MaxTokenSize deve essere impostato su 3/4 x 64 = 48 KB. Per maggiori informazioni sull'impostazione di MaxTokenSize, consultare Problemi con l'autenticazione Kerberos quando un utente appartiene a molti gruppi.

Riferimenti