Zum Inhalt springen
Deutsch

Kerberos Single Sign-On (SPNEGO)

Mit dem Single-Sign-On von Kerberos authentifizieren sich domänengebundene Windows-Clients – insbesondere Outlook – transparent bei grommunio, ohne dass ein Passwort abgefragt wird. Der HTTP-Dienst von Gromox akzeptiert Kerberos-Tickets über SPNEGO („Negotiate“) an, die anhand eines dedizierten Dienstkontos, seiner Service Principal Names (SPNs) und einer exportierten Keytab gegenüber einem Active Directory-KDC validiert werden.

  • Eine Active Directory-Domäne mit einem erreichbaren Domänencontroller (dem KDC).
  • Ein grommunio-Server, dessen HTTP-Dienst Kerberos-Tickets für ein HTTP/… SPN akzeptiert.
  • Administratorrechte auf dem DC (zum Erstellen des Kontos, Registrieren von SPNs und Exportieren einer Keytab).

Kerberos duldet keine Zeitabweichung von mehr als 5 Minuten. Synchronisieren Sie zunächst den grommunio-Server und den Domänencontroller mit derselben Zeitquelle (z. B. mit chronyd).

2. Erstellen Sie das Dienstkonto in Active Directory

Abschnitt betitelt „2. Erstellen Sie das Dienstkonto in Active Directory“

Erstellen Sie auf dem Domänencontroller ein Benutzerkonto, das den Dienst „HTTP“ repräsentiert (hier: gromox). Legen Sie auf der Registerkarte Konto den Anmeldenamen des Benutzers auf den SPN des Dienstes (HTTP/gromm1.testdom.local) im Domänenbereich fest und aktivieren Sie die Option Passwort läuft nie ab.

Active Directory account properties: the gromox service account's logon name set to HTTP/gromm1.testdom.local with "password never expires" enabled.

Aktivieren Sie unter Kontoeinstellungen sowohl „Dieses Konto unterstützt Kerberos AES 128-Bit-Verschlüsselung“ als auch „…AES 256-Bit-Verschlüsselung“.

Account options with the Kerberos AES 128-bit and 256-bit encryption checkboxes enabled.

Wählen Sie auf der Registerkarte Delegierung die Option „Diesem Benutzer die Delegierung an beliebige Dienste anvertrauen (nur Kerberos)“ aus.

Delegation tab with "Trust this user for delegation to any service (Kerberos only)" selected.

Registrieren Sie auf dem Domänencontroller die Service Principal Names für das Konto. Die SPNs HTTP/<host> und HTTP/autodiscover.<domain> sind dabei die wesentlichen Elemente:

Terminal window
setspn -S HTTP/gromm1.testdom.local@TESTDOM.LOCAL gromox
setspn -S HTTP/autodiscover.testdom.local gromox

Überprüfen Sie die registrierten SPNs (und entfernen Sie sie gegebenenfalls):

Terminal window
setspn -L gromox # list the account's SPNs
setspn -D <SPN> gromox # delete an SPN

Output of "setspn -L gromox" listing the registered HTTP SPNs for the account.

Exportieren Sie eine Kerberos-Keytab-Datei, die den SPN dem Dienstkonto zuordnet, unter Verwendung von AES256-SHA1:

Terminal window
ktpass.exe -princ HTTP/gromm1.testdom.local@TESTDOM.LOCAL ^
-mapUser gromox@TESTDOM.LOCAL -pass <PASSWORD> ^
-ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -out C:\Temp\krb5.keytab

5. Kopieren Sie die Keytab-Datei auf den grommunio-Server

Abschnitt betitelt „5. Kopieren Sie die Keytab-Datei auf den grommunio-Server“

Übertragen Sie krb5.keytab als /etc/krb5.keytab auf den grommunio-Server (z. B. mit WinSCP oder scp). Weisen Sie ihm restriktive Berechtigungen zu – er enthält das Schlüsselmaterial des Dienstkontos:

Terminal window
chown root:root /etc/krb5.keytab
chmod 600 /etc/krb5.keytab

Bearbeiten /etc/krb5.conf:

[libdefaults]
default_realm = TESTDOM.LOCAL
default_tgs_enctypes = aes256-sha1 aes128-sha1
default_tkt_enctypes = aes256-sha1 aes128-sha1
[realms]
TESTDOM.LOCAL = {
kdc = dc1.TESTDOM.LOCAL
admin_server = dc1.TESTDOM.LOCAL
default_domain = TESTDOM.LOCAL
}
[domain_realm]
.testdom.local = TESTDOM.LOCAL
testdom = TESTDOM.LOCAL

Bearbeiten /etc/gromox/http.cfg und hinzufügen:

http_auth_spnego=yes
## GSS provider — the built-in one is the default:
#gss_program=internal-gss
## …alternatively, use the Squid GSS helper:
gss_program=/usr/lib/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME
## verbose logging while testing (remove afterwards):
http_debug=2

Starten Sie den Dienst „HTTP“ neu, damit die Änderungen wirksam werden:

Terminal window
systemctl restart gromox-http

8. Test von einem Client aus, der einer Domäne angehört

Abschnitt betitelt „8. Test von einem Client aus, der einer Domäne angehört“
  1. Melden Sie sich bei einem in eine Domäne eingebundenen Windows-PC an.
  2. Erstellen Sie ein neues Outlook-Profil.
  3. Outlook fordert möglicherweise beim ersten Start einmal zur Eingabe von Anmeldedaten auf – geben Sie diese ein, aber speichern Sie das Passwort nicht.
  4. Bei nachfolgenden Starts darf Outlook nicht zur Eingabe eines Passworts auffordern.
  5. Öffnen Sie den Verbindungsstatus von Outlook (halten Sie Strg gedrückt und klicken Sie auf das Outlook-Systemtray-Symbol → Verbindungsstatus). In der Spalte Authn sollte Nego* stehen, was Kerberos/Negotiate bestätigt.

Outlook connection status with the Authn column showing Nego*, confirming Negotiate/Kerberos authentication.

Überprüfen Sie das Keytab und dessen Schlüsselversionsnummer – die KVNO muss mit den grommunio-Serverprotokollen übereinstimmen:

Terminal window
klist -k /etc/krb5.keytab # list principals + KVNO
klist -e -k /etc/krb5.keytab # include encryption types
# e.g. 51 HTTP/[email protected] (aes256-cts-hmac-sha1-96)

Rufen Sie den Squid-GSS-Helper direkt auf:

Terminal window
# Print a Negotiate token for the local host
/usr/lib/squid/negotiate_kerberos_auth_test $(hostname -f)
# Validate a token against the service principal; paste the token when prompted
/usr/lib/squid/negotiate_kerberos_auth -s HTTP/[email protected]
# → OK token=… [email protected] group=…

Rufen Sie einen ausführlichen Kerberos-Trace für eine Testanmeldung ab:

Terminal window
KRB5_TRACE=/dev/stdout kinit -V [email protected]

Auf einem Windows-Client können Sie bei Bedarf einen zusätzlichen Realm einem KDC zuordnen:

Terminal window
ksetup /addkdc TEST.AT dc1.testdom.local
  • Die Konfiguration funktioniert problemlos mit mehreren Domänencontrollern – stellen Sie lediglich sicher, dass DNS die KDC(s) korrekt auflöst.
  • Die beiden SPNs – HTTP/<host> und HTTP/autodiscover.<domain> – sind der entscheidende Faktor; die meisten Fehler sind auf einen fehlenden oder falsch eingegebenen SPN, eine Abweichung von mehr als 5 Minuten oder eine Nichtübereinstimmung von KVNO und enctype zwischen dem Keytab und dem DC.
  • Siehe auch die Übersicht zur Authentifizierung , um zu erfahren, wie Gromox neben seinen anderen Authentifizierungs-Backends mit Kerberos zusammenarbeitet.