Comment configurer la taille du jeton Kerberos avec le paramètre MaxTokenSize

Comment résoudre les problèmes de taille des tickets Kerberos et les problèmes d’authentification associés

Gérer les erreurs d’authentification liées à Kerberos peut être frustrant, surtout lorsque les utilisateurs reçoivent des messages d’erreur « Accès refusé » ou d’étranges messages du type « En-tête de requête trop long ».Parfois, cela est dû à la taille excessive du ticket Kerberos, causée par de nombreuses appartenances à des groupes, des problèmes avec l’historique SIDHistory ou des jetons trop volumineux. Ce guide explique comment déterminer la taille du jeton pour un utilisateur et comment optimiser votre système pour gérer des tickets plus volumineux si nécessaire. Car, comme toujours, Windows a la fâcheuse habitude de compliquer les choses.

Comment résoudre les problèmes de taille des tickets Kerberos et les problèmes d’authentification associés

Méthode 1 : Vérifier la taille du jeton Kerberos d’un utilisateur

Cela permet de déterminer si la taille de votre ticket Kerberos dépasse les capacités de votre système, et s’avère particulièrement utile en cas d’erreurs dans l’Observateur d’événements, telles que l’ID d’événement 40960 ou des erreurs de sécurité Kerberos. Windows ne propose pas de méthode intégrée pour consulter ces informations, mais un script PowerShell disponible sur GitHub peut effectuer les calculs nécessaires. Ce script estime la taille totale de vos groupes de sécurité, de l’historique SIDHistory et la taille globale du jeton.

Commencez par récupérer le script depuis ce lien GitHub. Enregistrez-le sous un autre nom CheckMaxTokenSize.ps1. Ensuite, autorisez l’exécution des scripts, par exemple :

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Accédez à l’emplacement où vous avez enregistré le script, par exemple, cd C:\scripts\et exécutez-le avec le nom d’utilisateur, comme ceci :

.\CheckMaxTokenSize.ps1 -Principals 'yourusername' -Details $true

Le script affichera la taille estimée du jeton, le nombre de groupes, les informations SIDHistory et indiquera si la taille est proche ou supérieure à votre limite maximale par défaut sous Windows (qui est généralement de 12 Ko sous Windows 7 et de 48 Ko sous Windows 8/Server 2012+).

Après l’exécution, vous verrez si la taille de votre jeton est suffisamment importante pour causer des problèmes, surtout si elle approche ou dépasse les limites par défaut. Un grand nombre de groupes imbriqués ou d’entrées SIDHistory peut rapidement faire exploser sa taille. Cette information vous aidera à déterminer s’il est préférable de réduire le nombre de groupes ou d’augmenter la valeur de MaxTokenSize.

Méthode 2 : Réduire le nombre d’adhérents aux groupes d’utilisateurs

C’est souvent la solution la plus simple, bien que pas toujours applicable. Si un utilisateur appartient à des centaines de groupes, surtout s’ils sont imbriqués, la taille du ticket Kerberos explose. On ignore pourquoi, mais réduire le nombre d’appartenances aux groupes (ou supprimer l’historique SIDHistory, si possible) peut éviter que le jeton Kerberos ne devienne trop volumineux. Désactiver certaines options de délégation peut parfois suffire, car cela allège le ticket.

Conseil de pro : vérifiez l’appartenance des utilisateurs aux groupes avec :

Get-ADUser -Identity 'username' -Properties MemberOf, SIDHistory | Select-Object MemberOf, SIDHistory

Si vous constatez un nombre excessif de groupes, parlez-en à votre administrateur afin de réduire le nombre de membres ou de faire le ménage dans SIDHistory pour diminuer le nombre de tickets.

Méthode 3 : Augmenter la valeur de registre MaxTokenSize

C’est la solution de dernier recours si la réduction de la taille des groupes ne suffit pas ou n’est pas envisageable. Vous pouvez augmenter la valeur de MaxTokenSize (par exemple, jusqu’à 64 Ko), mais attention : une valeur trop élevée peut impacter les performances ou la sécurité. La valeur par défaut est de 12 Ko dans les anciennes versions de Windows et de 48 Ko dans les versions plus récentes. Pour l’augmenter, vous devez modifier le registre.

  1. Ouvrir l’Éditeur du Registre ( regedit )
  2. Accédez à HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
  3. Créez une nouvelle valeur DWORD (32 bits) appelée MaxTokenSize
  4. Attribuez-lui une valeur (décimale) d’environ 48 000 (pour 48 Ko).Ajustez-la selon vos besoins.
  5. Redémarrez pour que les modifications soient prises en compte.

Pour confirmer la modification du registre, exécutez :

Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters | Select-Object MaxTokenSize

Cela permet à Windows d’allouer une mémoire tampon plus importante pour l’authentification Kerberos, réduisant ainsi les erreurs, notamment pour les utilisateurs appartenant à de nombreux groupes.

Oui, vous pouvez configurer cela via la stratégie de groupe, sous Configuration ordinateur > Stratégies > Modèles d’administration > Système > Kerberos. Recherchez le paramètre « Taille maximale de la mémoire tampon du jeton de contexte SSPI Kerberos ».

Attention toutefois à ne pas exagérer : Microsoft recommande de ne pas dépasser 64 Ko. En effet, une mémoire tampon plus importante implique une consommation de mémoire accrue et d’éventuels problèmes de sécurité.

Méthode 4 : Résoudre les erreurs HTTP 400 d’IIS lors de l’utilisation de Kerberos

Si votre site web renvoie des erreurs HTTP 400 du type « En-tête de requête trop long », cela est probablement dû au fait que les groupes de sécurité entraînent une augmentation excessive de la taille des jetons Kerberos, dépassant ainsi les limites d’IIS. Ce problème survient lorsqu’IIS tente d’intégrer une quantité importante d’informations de groupe dans l’ WWW-Authenticateen-tête.

Pour résoudre ce problème, modifiez la clé de registre dans HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters :

  • MaxFieldLength — la valeur par défaut est de 16 Ko. Augmentez-la progressivement, par exemple jusqu’à 32000 (32 Ko).
  • MaxRequestBytes — la valeur par défaut est de 16 Mo, mais vous pouvez l’augmenter pour gérer des en-têtes plus volumineux si nécessaire, par exemple 48 000 octets.

N’oubliez pas que l’augmentation de ces valeurs peut avoir un impact sur les performances et la sécurité du serveur. Procédez par étapes, puis redémarrez IIS :

iisreset

Cela résout généralement le problème, mais lorsque les groupes sont très volumineux, il est préférable de réduire le nombre ou la portée des appartenances aux groupes plutôt que d’augmenter simplement la taille des en-têtes.

Résumé

  • Vérifiez la taille du jeton Kerberos de votre utilisateur pour voir si c’est la cause du problème.
  • Réduisez si possible le nombre excessif d’adhésions à des groupes ou à SIDHistory.
  • Augmentez la valeur du paramètre MaxTokenSize dans le registre pour autoriser des tickets plus volumineux (jusqu’à 64 Ko, avec précaution).
  • Ajustez les limites des en-têtes IIS si vous obtenez des erreurs HTTP 400 lors de l’utilisation de l’authentification Kerberos.

Conclure

La gestion de la taille des tickets Kerberos repose sur un mélange de diagnostic et d’ajustements. Ce n’est pas toujours simple, mais ces étapes vous permettront d’identifier si la taille est en cause et d’y remédier. Généralement, réduire la taille des groupes ou augmenter la taille du tampon sur les points de terminaison concernés suffit. Cependant, ne vous attendez pas à des miracles si votre utilisateur appartient à des centaines de groupes : parfois, la seule solution consiste à nettoyer les appartenances aux groupes ou l’historique SIDHistory.

J’espère que cela permettra à quelqu’un de gagner quelques heures. Bonne chance ! N’oubliez pas de consulter les journaux de l’Observateur d’événements pour voir si les erreurs diminuent après les modifications.