So generieren Sie eine Keytab-Datei für die Kerberos-Authentifizierung in Active Directory

Die Verwaltung von Kerberos-Keytab-Dateien in Linux-Umgebungen oder auch in bestimmten Windows-Konfigurationen kann bei der Automatisierung der Dienstauthentifizierung sehr mühsam sein. Ein Keytab ist im Prinzip wie ein geheimer Handschlag – er enthält verschlüsselte Schlüssel, die es Diensten ermöglichen, sich ohne ständige Passwortabfrage zu authentifizieren. Wenn Sie jemals versucht haben, einen Dienst (z. B.nginx oder Apache) mit Active Directory einzurichten und es einfach nicht funktioniert hat, liegt es höchstwahrscheinlich daran, dass der Keytab nicht korrekt konfiguriert oder der SPN (Service Principal Name) nicht richtig gebunden ist. Dieser Prozess kann zunächst recht einschüchternd wirken, insbesondere da Windows keine einfachen Tools bietet, um ohne Umwege einen Blick in einen Keytab zu werfen. Mit ein paar Befehlen und etwas Verständnis für die Funktionsweise wird es jedoch deutlich weniger frustrierend.

Ziel dieses Projekts ist es, eine Keytab-Datei für ein Dienstkonto oder ein Maschinenobjekt zu generieren, den korrekten SPN zu binden und sicherzustellen, dass sich der Dienst problemlos mit Kerberos authentifizieren kann. Eine funktionierende Keytab-Datei ermöglicht eine reibungslosere, passwortlose Authentifizierung – ideal für Cronjobs, Webserver und alle Anwendungen, die im Hintergrund sicher kommunizieren müssen. Falls Ihr Dienst also aufgrund einer fehlenden oder falsch konfigurierten Keytab-Datei nicht mit Kerberos funktioniert, sollte Ihnen diese Anleitung weiterhelfen.

So erstellen und verwalten Sie Kerberos-Keytab-Dateien für AD-Dienste

Erstellen eines AD-Benutzers für die Kerberos-Authentifizierung

Zunächst benötigen Sie ein dediziertes Benutzerkonto in Active Directory, das vom Dienst verwendet wird. Sie können es über die ADUC-Konsole (dsa.msc) oder PowerShell erstellen. Wichtig ist, dass Sie ein sicheres Kennwort vergeben, das niemals abläuft und nicht geändert werden kann. Andernfalls wird Ihre Keytab-Datei ungültig, wenn sich das Kennwort später ändert. Hier ist ein Beispiel mit 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

Nun sollten die Passwortrichtlinien festgelegt werden:

Get-ADUser web | Set-ADUser -PasswordNeverExpires:$true -CannotChangePassword:$true

Dies ist gewissermaßen notwendig, um zu verhindern, dass Kerberos aufgrund einer Passwortänderung ausfällt.

SPN an das Konto binden

Jetzt wird es etwas technischer. Ein SPN ist wie eine Kennung für den Dienst, bei dem Sie sich authentifizieren. Normalerweise weisen Sie einen SPN mit ` setspn` zu. Um beispielsweise HTTP an das Konto zu binden:

setspn -A HTTP/web.domain.com web

Prüfen Sie, ob die SPNs ordnungsgemäß verknüpft sind:

setspn -L web

Wenn Ihr SPN angezeigt wird, ist alles in Ordnung. Falls nicht, fügen Sie ihn hinzu; die Verknüpfung sollte nun hergestellt sein. Dieser Schritt ist unerlässlich, damit Kerberos das für den Dienst zuständige Konto identifizieren kann.

Generieren der Keytab mit ktpass

Dies ist der entscheidende Schritt, der oft zu Fehlern führt. Der verwendete Befehl lautet ktpass und erstellt eine Keytab-Datei für den zugewiesenen SPN. Hier ist ein typischer Befehl:

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

Warum sollte man `-crypto all` verwenden ? Weil in manchen Konfigurationen nicht alle Verschlüsselungstypen aktiviert sind. Dies trägt jedoch generell zu einer breiten Kompatibilität bei. Die Ausgabe bestätigt, dass der SPN dem Benutzer zugeordnet und die Keytab-Datei erfolgreich erstellt wurde. Beachten Sie, dass sich das Attribut `msDS-KeyVersionNumber` des Active Directory-Objekts bei jeder Kennwortänderung erhöht. Wenn sich also das Kontokennwort ändert, muss die Keytab-Datei neu generiert werden.

Überprüfung und Verwendung der Keytab

Windows verfügt über keine nativen Tools zum Untersuchen von Keytabs, aber wenn Java installiert ist, können Sie klist.exe aus dem Java-Bin-Verzeichnis verwenden:

cd "C:\Program Files\Java\jre1.8.0_181\bin" & klist.exe -K -e -t -k C:\share\web.keytab

Hier werden Inhalte wie SPNs, Verschlüsselungstypen und Zeitstempel angezeigt. Achtung: Falls Ihre Keytab-Datei nicht funktioniert, überprüfen Sie die Dateiberechtigungen. Sie sollte unbedingt geschützt sein, da jeder mit Lesezugriff den Dienst missbrauchen kann.

Eine Besonderheit: Wenn Sie das Kontopasswort in Active Directory ändern, erhöht sich die KVNO (Key Version Number), und alle alten Keytabs werden ungültig. Notieren Sie sich daher, wann Sie den Keytab neu generieren müssen, um Serviceunterbrechungen zu vermeiden.

Kurz gesagt: Das Erstellen einer Keytab ist keine Zauberei, fühlt sich aber manchmal so an. Rechnen Sie mit etwas Ausprobieren, insbesondere bei SPN-Bindungen und Verschlüsselungstypen. Ist die Einrichtung jedoch abgeschlossen, vereinfacht sie die Kerberos-Authentifizierung erheblich, insbesondere für Linux-Dienste oder plattformübergreifende Integrationen.

Zusammenfassung

  • Erstellen Sie einen dedizierten AD-Benutzer mit einem festen Passwort.
  • Legen Sie in den Benutzerkontoeinstellungen fest, dass das Passwort nicht abläuft oder geändert wird.
  • Binden Sie einen SPN mit setspn.
  • Generieren Sie die Keytab-Datei mit ktpass und speichern Sie sie sicher.
  • Überprüfen Sie den Inhalt mit Java’s klist.exe.
  • Denken Sie daran: Wenn Sie das AD-Passwort ändern, muss die Keytab-Datei neu generiert werden.

Zusammenfassung

Dieser ganze Prozess kann etwas umständlich sein, besonders wenn man mit Kerberos und Active Directory noch nicht vertraut ist. Sobald man aber den Dreh mit dem Erstellen und Überprüfen von Keytabs raus hat, wird die Anwendung auf Linux- oder Windows-Dienste deutlich einfacher. Trotzdem muss man mit ein paar Anpassungen rechnen – zum Beispiel an SPNs und Verschlüsselungstypen –, aber das gehört eben dazu. Hoffentlich hilft das jemandem, seine Kerberos-Konfiguration reibungsloser zum Laufen zu bringen. Wichtig ist nur, die Keytabs sicher aufzubewahren – niemand sollte sie in die Finger bekommen.