Problemi con l'autenticazione Kerberos quando un utente appartiene a molti gruppi

Questo articolo consente di risolvere i problemi di errore di autenticazione Kerberos quando un utente appartiene a molti gruppi.

Si applica a: Windows 10 (tutte le edizioni), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2
Numero KB originale: 327825

Sintomi

Un utente che appartiene a un numero elevato di gruppi di sicurezza presenta problemi di autenticazione. Durante l'autenticazione, l'utente può visualizzare un messaggio come HTTP 400 - Richiesta non valida (intestazione richiesta troppo lunga). L'utente ha anche problemi di accesso alle risorse e le impostazioni di Criteri di gruppo dell'utente potrebbero non essere aggiornate correttamente.

Per altre informazioni sul contesto dell'errore, vedere Risposte HTTP 400 Richiesta non valida (intestazione richiesta troppo lunga) alle richieste HTTP.

Nota

In condizioni simili, l'autenticazione di Windows NTLM funziona come previsto. È possibile che il problema di autenticazione Kerberos non venga visualizzato a meno che non si analizzi il comportamento di Windows. Tuttavia, in questi scenari, Windows potrebbe non essere in grado di aggiornare le impostazioni di Criteri di gruppo.

Questo comportamento si verifica in una qualsiasi delle versioni di Windows attualmente supportate. Per informazioni sulle versioni attualmente supportate di Windows, vedere La scheda dei fatti del ciclo di vita di Windows.

Causa

L'utente non può eseguire l'autenticazione perché il ticket compilato da Kerberos per rappresentare l'utente non è sufficientemente grande da contenere tutte le appartenenze al gruppo dell'utente.

Nell'ambito di Authentication Service Exchange, Windows crea un token per rappresentare l'utente ai fini dell'autorizzazione. Questo token (detto anche contesto di autorizzazione) include gli identificatori di sicurezza (SID) dell'utente e i SID di tutti i gruppi a cui appartiene l'utente. Include anche tutti i SID archiviati nell'attributo dell'account sIDHistory utente. Kerberos archivia questo token nella struttura di dati PAC (Privilege Attribute Certificate) in Kerberos Ticket-Getting Ticket (TGT). A partire da Windows Server 2012, Kerberos archivia anche il token nella struttura di dati Active Directory Claims information (Dynamic Controllo di accesso) nel ticket Kerberos. Se l'utente è membro di un numero elevato di gruppi e se sono presenti molte attestazioni per l'utente o il dispositivo in uso, questi campi possono occupare molti spazi nel ticket.

Il token ha una dimensione massima fissa (MaxTokenSize). I protocolli di trasporto, ad esempio RPC (Remote Procedure Call) e HTTP, si basano sul MaxTokenSize valore quando allocano buffer per le operazioni di autenticazione. MaxTokenSize ha il valore predefinito seguente, a seconda della versione di Windows che compila il token:

  • Windows Server 2008 R2 e versioni precedenti e Windows 7 e versioni precedenti: 12.000 byte
  • Windows Server 2012 e versioni successive e Windows 8 e versioni successive: 48.000 byte

In genere, se l'utente appartiene a più di 120 gruppi universali, il valore predefinito MaxTokenSize non crea un buffer sufficientemente grande da contenere le informazioni. L'utente non può eseguire l'autenticazione e potrebbe ricevere un messaggio di memoria insufficiente . Inoltre, Windows potrebbe non essere in grado di applicare Criteri di gruppo impostazioni per l'utente.

Nota

Altri fattori influiscono anche sul numero massimo di gruppi. Ad esempio, i SID per i gruppi globali e locali del dominio hanno requisiti di spazio più piccoli. Windows Server 2012 e versioni successive aggiungono informazioni sulle attestazioni al ticket Kerberos e comprimeno anche i SID delle risorse. Entrambe le funzionalità modificano i requisiti di spazio.

Risoluzione

Per risolvere questo problema, aggiornare il Registro di sistema in ogni computer che partecipa al processo di autenticazione Kerberos, inclusi i computer client. È consigliabile aggiornare tutti i sistemi basati su Windows, soprattutto se gli utenti devono accedere tra più domini o foreste.

Importante

L'errata modifica del Registro di sistema può causare seri problemi. Prima di modificarlo, eseguire il backup del Registro di sistema per il ripristino, in caso di problemi.

In ognuno di questi computer impostare la voce del MaxTokenSize Registro di sistema su un valore maggiore. È possibile trovare questa voce nella HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters sottochiave. I computer devono essere riavviate dopo aver effettuato questa modifica.

Per altre informazioni sulla determinazione di un nuovo valore per MaxTokenSize, vedere la sezione Calcolo delle dimensioni massime del token di questo articolo.

Si consideri, ad esempio, un utente che usa un'applicazione Web basata su un client SQL Server. Come parte del processo di autenticazione, il client SQL Server passa il token dell'utente a un database SQL Server back-end. In questo caso, è necessario configurare la voce del MaxTokenSize Registro di sistema in ognuno dei computer seguenti:

  • Il computer client che esegue Internet Explorer
  • Server Web in esecuzione che esegue IIS
  • Il computer client SQL Server
  • Il computer di database SQL Server

In Windows Server 2012 (e versioni successive), Windows può registrare un evento (ID evento 31) se la dimensione del token supera una determinata soglia. Per abilitare questo comportamento, è necessario configurare l'impostazione Criteri di gruppo Configurazione computer\Modelli amministrativi\Sistema\KDC\Avviso per ticket Kerberos di grandi dimensioni.

Calcolo della dimensione massima del token

Usare la formula seguente per calcolare le dimensioni del token generato da Windows per un utente specifico. Questo calcolo consente di determinare se è necessario modificare MaxTokenSize.

TokenSize = 1200 + 40d + 8s

Per Windows Server 2012 (e versioni successive), questa formula definisce i relativi componenti nel modo seguente:

  • 1200. Valore di overhead stimato per un ticket Kerberos. Questo valore può variare a seconda di fattori quali la lunghezza del nome di dominio DNS e la lunghezza del nome client.
  • d. Somma dei valori seguenti:
    • Numero di appartenenze a gruppi universali esterni al dominio dell'account dell'utente.
    • Numero di SID archiviati nell'attributo dell'account sIDHistory . Questo valore conta le appartenenze ai gruppi e i SID utente.
  • s. Somma dei valori seguenti:
    • Numero di appartenenze ai gruppi universali all'interno del dominio dell'account dell'utente.
    • Numero di appartenenze ai gruppi locali del dominio.
    • Numero di appartenenze ai gruppi globali.

Windows Server 2008 R2 e versioni precedenti usano la stessa formula. Tuttavia, queste versioni considerano il numero di appartenenze a gruppi locali del dominio come parte del valore d anziché del valore s .

Se si dispone di un MaxTokenSize valore di 0x0000FFFF (64K), è possibile memorizzare nel buffer circa 1600 SID di classe d o circa 8000 SID di classe s. Tuttavia, diversi altri fattori influiscono sul valore che è possibile usare in modo sicuro per MaxTokenSize, inclusi i seguenti:

  • Se si usa trusted per gli account di delega , ogni SID richiede il doppio dello spazio.

  • Se sono presenti più trust, configurare i trust per filtrare i SID. Questa configurazione riduce l'impatto delle dimensioni del ticket Kerberos.

  • Se si usa Windows Server 2012 o una versione successiva, i fattori seguenti influiscono anche sui requisiti di spazio SID:

  • Se Kerberos è stato configurato per l'uso della delega non vincolata, è necessario raddoppiare il TokenSize valore della formula per ottenere una stima valida di MaxTokenSize.

    Importante

    Nel 2019 Microsoft ha fornito gli aggiornamenti a Windows che modificano la configurazione predefinita della delega non vincolata per Kerberos in disabilitata. Per altre informazioni, vedere Aggiornamenti alla delega TGT tra trust in ingresso in Windows Server.

    Poiché la compressione SID delle risorse è ampiamente usata e la delega non vincolata è deprecata, MaxTokenSize il valore di 48000 o superiore dovrebbe diventare sufficiente per tutti gli scenari.

Problemi noti che interessano MaxTokenSize

Un MaxTokenSize valore di 48.000 byte deve essere sufficiente per la maggior parte delle implementazioni. Questo è il valore predefinito in Windows Server 2012 e versioni successive. Tuttavia, se si decide di usare un valore maggiore, esaminare i problemi noti in questa sezione.

  • Limite di dimensioni di 1.010 SID di gruppo per il token di accesso LSA

    Questo problema è simile in quanto un utente con un numero eccessivo di appartenenze a gruppi non può eseguire l'autenticazione, ma i calcoli e le condizioni che regolano il problema sono diversi. Ad esempio, l'utente potrebbe riscontrare questo problema durante l'uso dell'autenticazione Kerberos o dell'autenticazione di Windows NTLM. Per altre informazioni, vedere Registrazione su un account utente membro di più di 1.010 gruppi che potrebbero non riuscire in un computer basato su Windows Server.

  • Problema noto quando si usano valori di MaxTokenSize maggiori di 48.000

    Per attenuare un vettore di attacco Denial of Service, Internet Information Server (IIS) usa una dimensione limitata del buffer delle richieste HTTP di 64 KB. Un ticket Kerberos che fa parte di una richiesta HTTP viene codificato come Base64 (6 bit espansi a 8 bit). Pertanto, il ticket Kerberos usa il 133% delle dimensioni originali. Pertanto, quando la dimensione massima del buffer è 64 KB in IIS, il ticket Kerberos può usare 48.000 byte.

    Se si imposta la voce del MaxTokenSize Registro di sistema su un valore maggiore di 48000 byte e lo spazio del buffer viene usato per i SID, potrebbe verificarsi un errore IIS. Tuttavia, se si imposta la voce del MaxTokenSize Registro di sistema su 48.000 byte e si usa lo spazio per SID e attestazioni, si verifica un errore Kerberos.

    Per altre informazioni sulle dimensioni del buffer IIS, vedere Come limitare le dimensioni dell'intestazione della trasmissione HTTP accettata da IIS da un client in Windows 2000.

  • Problemi noti quando si usano valori di MaxTokenSize maggiori di 65.535

    Nelle versioni precedenti di questo articolo sono stati illustrati valori fino a 100.000 byte per MaxTokenSize. Tuttavia, è stato rilevato che le versioni di AMMINISTRATORE SMS presentano problemi quando è MaxTokenSize pari o superiore a 100.000 byte.

    È stato anche rilevato che il protocollo IPSEC IKE non consente a un BLOB di sicurezza di diventare più grande di 66.536 byte e che avrebbe esito negativo anche se MaxTokenSize è impostato su un valore più grande.