La gestion des fichiers keytab Kerberos sous Linux, voire dans certaines configurations Windows, peut s’avérer complexe lors de l’automatisation de l’authentification des services. Un keytab est en quelque sorte une poignée de main secrète : il contient des clés chiffrées permettant aux services de s’authentifier sans avoir à saisir systématiquement un mot de passe. Si vous avez déjà tenté de configurer un service (par exemple, nginx ou Apache) avec Active Directory et que cela n’a pas fonctionné, il y a de fortes chances que le keytab soit mal configuré ou que le SPN (Nom principal de service) soit mal associé. Ce processus peut paraître intimidant au premier abord, d’autant plus que Windows ne propose pas d’outils simples pour examiner le contenu d’un keytab sans manipulations complexes. Cependant, avec quelques commandes et une bonne compréhension de son fonctionnement, la tâche devient beaucoup moins frustrante.
L’objectif est de générer un fichier keytab pour un compte de service ou un objet machine, d’y associer le SPN approprié et de garantir une authentification Kerberos fluide. Un fichier keytab fonctionnel assure une authentification sans mot de passe, pratique pour les tâches cron, les serveurs web et toute application nécessitant des communications sécurisées en arrière-plan. Si votre service rencontre des difficultés avec Kerberos en raison d’un fichier keytab manquant ou mal configuré, ce guide vous permettra de résoudre le problème.
Comment créer et gérer des fichiers Keytab Kerberos pour les services AD
Création d’un utilisateur AD pour l’authentification Kerberos
Vous avez d’abord besoin d’un compte utilisateur dédié dans Active Directory que le service utilisera. Vous pouvez le créer via la console ADUC (dsa.msc) ou PowerShell. Il est essentiel d’attribuer un mot de passe connu et de le configurer pour qu’il n’expire jamais et ne puisse pas être modifié ; sinon, votre fichier keytab deviendra invalide si le mot de passe change ultérieurement. Voici un exemple utilisant PowerShell :
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services, OU=Munich, OU=DE, DC=test, DC=com" -AccountPassword (ConvertTo-SecureString "Sup6r!Pa$s" -AsPlainText -Force) -Enabled $true
Maintenant, verrouillez les politiques de mots de passe :
Get-ADUser web | Set-ADUser -PasswordNeverExpires:$true -CannotChangePassword:$true
C’est en quelque sorte nécessaire pour éviter que Kerberos ne soit compromis suite à un changement de mot de passe.
Lier le SPN au compte
C’est là que les choses se compliquent un peu. Un SPN est comme un identifiant pour le service que vous authentifiez. Généralement, vous attribuez un SPN à l’aide de la commande `setspn`. Par exemple, pour lier le protocole HTTP au compte :
setspn -A HTTP/web.domain.com web
Vérifiez si les SPN sont correctement liés :
setspn -L web
Si votre SPN apparaît, tout est en ordre. Sinon, ajoutez-le ; la liaison devrait alors être établie. Cette étape est essentielle pour que Kerberos puisse identifier le compte responsable du service.
Générer le Keytab avec ktpass
C’est l’étape cruciale qui pose souvent problème. La commande utilisée est ktpass, qui crée un fichier keytab pour le SPN que vous avez attribué. Voici un exemple de commande :
ktpass -princ HTTP/web.domain.com@DOMAIN. COM -mapuser web -crypto all -ptype KRB5_NT_PRINCIPAL -pass "Sup6r!Pa$s" -target yourdomaincontroller.example.com -out C:\share\web.keytab
Pourquoi utiliser l’option `-crypto all` ? Parce que sur certaines configurations, tous les types de chiffrement ne sont pas activés, mais cette option permet généralement d’assurer une large compatibilité. Le message de sortie indiquera que le SPN a été associé à l’utilisateur et que le fichier keytab a été créé avec succès. Notez que l’ attribut `msDS-KeyVersionNumber` de l’objet Active Directory est incrémenté lors de la modification du mot de passe. Par conséquent, si le mot de passe du compte est mis à jour, vous devrez régénérer le fichier keytab.
Vérification et utilisation du Keytab
Windows ne dispose pas d’outils natifs pour inspecter les fichiers keytab, mais si Java est installé, vous pouvez utiliser klist.exe depuis le répertoire bin de Java :
cd "C:\Program Files\Java\jre1.8.0_181\bin" & klist.exe -K -e -t -k C:\share\web.keytab
Ceci affichera des informations telles que les SPN, les types de chiffrement et les horodatages. Attention : si votre fichier keytab ne fonctionne pas, vérifiez attentivement les permissions du fichier ; il doit être protégé car toute personne ayant un accès en lecture peut potentiellement usurper l’identité du service.
Un détail étrange : si vous modifiez le mot de passe du compte dans Active Directory, le numéro de version de la clé (KVNO) est incrémenté et tous les anciens fichiers keytab deviennent invalides. Il est donc important de noter la date de régénération du fichier keytab afin d’éviter toute interruption de service.
En résumé ? Créer un fichier keytab n’a rien de magique, mais on a parfois cette impression. Il faut s’attendre à quelques tâtonnements, notamment avec les liaisons SPN et les types de chiffrement, mais une fois configuré, il simplifie considérablement l’authentification Kerberos, en particulier pour les services Linux ou les intégrations multiplateformes.
Résumé
- Créez un utilisateur AD dédié avec un mot de passe fixe.
- Configurez les options du compte utilisateur pour empêcher l’expiration et la modification du mot de passe.
- Liez un SPN en utilisant setspn.
- Générez le keytab avec ktpass et stockez-le en lieu sûr.
- Vérifiez le contenu avec klist.exe de Java.
- N’oubliez pas que la modification du mot de passe AD implique la régénération du fichier keytab.
Conclure
L’ensemble du processus peut paraître un peu complexe, surtout si vous débutez avec Kerberos et Active Directory. Mais une fois que vous aurez compris la création et la vérification des keytabs, leur application à vos services Linux ou Windows deviendra beaucoup plus simple. Il vous faudra tout de même faire quelques essais, notamment avec les SPN et les types de chiffrement, mais c’est le jeu ! J’espère que cela aidera certains d’entre vous à configurer Kerberos plus facilement. N’oubliez pas de conserver vos keytabs en lieu sûr : personne ne doit y avoir accès.