Chapitre 16a Clients, groupware & CLI Admin : #pIdentity

SSO Kerberos : connexion sans mot de passe pour les PC du domaine, Outlook et les applications de messagerie

Avec Kerberos, les PC Windows du réseau de l'entreprise se connectent sans demande de mot de passe : le webmail et l'administration via SPNEGO ("Se connecter avec Windows"), Outlook via MAPI, EWS, ActiveSync et Autodiscover avec Negotiate, Thunderbird et les autres applications de messagerie via IMAP, SMTP, POP3 et ManageSieve avec SASL GSSAPI. nextxch valide lui-même les tickets à l'aide d'un keytab téléversé ; cela fonctionne sous Linux et sur des serveurs Windows qui ne sont pas membres du domaine. Lorsque nextxch s'exécute sur un membre du domaine, le compte machine peut être utilisé à la place d'un keytab. NTLM n'est volontairement pas pris en charge.

Conseil d'exploitation & note d'architecture

Le nom d'hôte dans les SPN doit être exactement celui qu'utilisent les clients (par ex. mail.example.com) et se résoudre via un enregistrement A. Après chaque changement de mot de passe du compte de service, recréez et téléversez le keytab ; "Check Kerberos" affiche la version de clé et le chiffrement de chaque SPN.

Active Directory : compte de service, SPN et keytab

PowerShell en tant qu'administrateur du domaine. Exécutez ktpass une seule fois pour le premier SPN ; tous les SPN suivants du même compte partagent la clé et nécessitent uniquement setspn.

Référence / configuration
# 1. Service account (password never expires, AES only)
New-ADUser -Name svc-nextxch -AccountPassword (Read-Host -AsSecureString) `
  -Enabled $true -PasswordNeverExpires $true -KerberosEncryptionType AES256

# 2. Register the service principals (host name = name clients use)
setspn -S HTTP/mail.example.com  CORP\svc-nextxch
setspn -S imap/mail.example.com  CORP\svc-nextxch
setspn -S smtp/mail.example.com  CORP\svc-nextxch
setspn -S pop/mail.example.com   CORP\svc-nextxch
setspn -S sieve/mail.example.com CORP\svc-nextxch

# 3. Create the keytab (resets the account password)
ktpass -princ HTTP/mail.example.com@CORP.LOCAL -mapuser CORP\svc-nextxch `
  -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out nextxch.keytab

# 4. nextxch Admin > Identity sources > Kerberos
#    realm CORP.LOCAL, SPNs as above, upload the keytab, "Check Kerberos"

# Machine account mode (nextxch on domain member MAILSRV, no keytab):
setspn -S HTTP/mail.example.com CORP\MAILSRV$
setspn -S imap/mail.example.com CORP\MAILSRV$

MIT Kerberos, Heimdal et FreeIPA

Créez les principaux et exportez leurs clés dans un keytab ; FreeIPA : ipa service-add et ipa-getkeytab.

Référence / configuration
# MIT / Heimdal
kadmin -q "addprinc -randkey HTTP/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey imap/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey smtp/mail.firma.de@FIRMA.LOCAL"
kadmin -q "ktadd -k /tmp/nextxch.keytab HTTP/mail.firma.de imap/mail.firma.de smtp/mail.firma.de"

# FreeIPA
ipa service-add HTTP/mail.firma.de
ipa service-add imap/mail.firma.de
ipa-getkeytab -s ipa.firma.local -p HTTP/mail.firma.de -k /tmp/nextxch.keytab
ipa-getkeytab -s ipa.firma.local -p imap/mail.firma.de -k /tmp/nextxch.keytab

# Test vom Client:
kinit anna && curl --negotiate -u : https://mail.firma.de/api/auth/kerberos

Test manuel avec un AD réel

Les tests automatisés valident des tickets issus de keytabs générés. Avec un véritable contrôleur de domaine, testez également ainsi :

Référence / configuration
# Auf einem Domänen-PC als normaler Benutzer:
klist purge
Invoke-WebRequest https://mail.firma.de/api/auth/kerberos -UseDefaultCredentials
klist                     # zeigt Ticket für HTTP/mail.firma.de
# Erwartet: 200 {"ok":true,"email":"anna@firma.de"}

# IMAP mit GSSAPI (Linux-Client in der Domäne):
kinit anna@FIRMA.LOCAL
curl -v --login-options AUTH=GSSAPI --negotiate -u : imaps://mail.firma.de/INBOX

Paramètres, valeurs par défaut & bonnes pratiques

Paramètre / emplacement Description Valeur par défaut Bonne pratique en production
Keytab Format MIT tel qu'écrit par ktpass, ktutil et kadmin. Stocké chiffré avec le trousseau du serveur et jamais réaffiché ; la page d'administration n'affiche que le principal, le kvno et le chiffrement. Keytab-Modus Utilisez AES256. Les clés RC4 fonctionnent, mais "Vérifier Kerberos" émet un avertissement à leur sujet.
Benutzerzuordnung Le principal Kerberos (anna@CORP.LOCAL) est associé via la source d'identité : userPrincipalName, sAMAccountName ou adresse e-mail. Seul le realm configuré (et les autres realms autorisés) est accepté. Realm Pflicht Configurez et synchronisez d'abord la source d'identité AD, puis activez Kerberos.
Browser Les navigateurs n'envoient des tickets Kerberos qu'à des adresses intranet de confiance. Sans cela, la page de connexion habituelle s'affiche. Automatischer Versuch aus GPO "Liste des attributions de sites aux zones" : https://mail.example.com = 1 (intranet). Chrome/Edge : AuthServerAllowlist, Firefox : network.negotiate-auth.trusted-uris.
Outlook und ActiveSync MAPI, EWS, Autodiscover et ActiveSync proposent "WWW-Authenticate: Negotiate" en plus de Basic. Outlook sur les PC du domaine utilise alors le ticket de l'utilisateur connecté. Negotiate + Basic Dans Outlook, sous Paramètres du compte > Paramètres supplémentaires > Sécurité, désactivez "Toujours demander les informations d'identification de connexion".
Mail-Programme (GSSAPI) IMAP, la soumission SMTP, POP3 et ManageSieve proposent SASL GSSAPI (avec authentification mutuelle, RFC 4752). Thunderbird : Paramètres des comptes > Serveur > Authentification "Kerberos / GSSAPI". imap/, smtp/, pop/, sieve/ Sur les clients Linux, exécutez d'abord kinit ; klist affiche ensuite le ticket pour imap/mail.example.com.