Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
Calcolare le dimensioni del token Kerberos dell'utente usando la formula descritta in Problemi di autenticazione Kerberos quando un utente appartiene a molti gruppi.
Impostare il valore di
MaxFieldLength
eMaxRequestBytes
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.