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.
Bevor Sie beginnen
Abschnitt betitelt „Bevor Sie beginnen“- 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).
1. Zeit synchronisieren
Abschnitt betitelt „1. Zeit synchronisieren“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.

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

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

3. Registrieren Sie die SPNs
Abschnitt betitelt „3. Registrieren Sie die SPNs“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:
setspn -S HTTP/gromm1.testdom.local@TESTDOM.LOCAL gromoxsetspn -S HTTP/autodiscover.testdom.local gromoxÜberprüfen Sie die registrierten SPNs (und entfernen Sie sie gegebenenfalls):
setspn -L gromox # list the account's SPNssetspn -D <SPN> gromox # delete an SPN
4. Exportieren Sie die Keytab-Datei
Abschnitt betitelt „4. Exportieren Sie die Keytab-Datei“Exportieren Sie eine Kerberos-Keytab-Datei, die den SPN dem Dienstkonto zuordnet, unter Verwendung von AES256-SHA1:
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.keytab5. 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:
chown root:root /etc/krb5.keytabchmod 600 /etc/krb5.keytab6. Kerberos auf dem Server konfigurieren
Abschnitt betitelt „6. Kerberos auf dem Server konfigurieren“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.LOCAL7. SPNEGO in Gromox aktivieren
Abschnitt betitelt „7. SPNEGO in Gromox aktivieren“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=2Starten Sie den Dienst „HTTP“ neu, damit die Änderungen wirksam werden:
systemctl restart gromox-http8. 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“- Melden Sie sich bei einem in eine Domäne eingebundenen Windows-PC an.
- Erstellen Sie ein neues Outlook-Profil.
- Outlook fordert möglicherweise beim ersten Start einmal zur Eingabe von Anmeldedaten auf – geben Sie diese ein, aber speichern Sie das Passwort nicht.
- Bei nachfolgenden Starts darf Outlook nicht zur Eingabe eines Passworts auffordern.
- Ö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.

Überprüfung und Fehlerbehebung
Abschnitt betitelt „Überprüfung und Fehlerbehebung“Überprüfen Sie das Keytab und dessen Schlüsselversionsnummer – die KVNO muss mit den grommunio-Serverprotokollen übereinstimmen:
klist -k /etc/krb5.keytab # list principals + KVNOklist -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:
# 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# → OK token=… [email protected] group=…Rufen Sie einen ausführlichen Kerberos-Trace für eine Testanmeldung ab:
Auf einem Windows-Client können Sie bei Bedarf einen zusätzlichen Realm einem KDC zuordnen:
ksetup /addkdc TEST.AT dc1.testdom.localAnmerkungen
Abschnitt betitelt „Anmerkungen“- 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>undHTTP/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.