Einführung / Konfiguration des FirstSpirit-Servers / Konfigurationsdateien (FirstSpirit-Server) / Anmeldevorgang (fs-jaas.conf) / Kerberos-Ticket (Integrierte Windows-Anmeldung)

Kerberos-Ticket (Integrierte Windows-Anmeldung)

Inhaltsverzeichnis

JAAS-Modulname: de.espirit.firstspirit.server.authentication.KerberosLoginModule

Zur Anmeldung wird ein Kerberos-Ticket akzeptiert, das vom Webbrowser an den FirstSpirit-Server übergeben wird. Der FirstSpirit-Redakteur braucht sich bei Verwendung dieses Login-Moduls nur einmal an seinem Arbeitsplatzrechner (Windows, Mac, GNU/Linux) anzumelden, unter der Voraussetzung, dass eine Kerberos-Infrastruktur vorhanden ist, und kann anschließend FirstSpirit ohne erneute Passworteingabe benutzen. Unter Microsoft Windows ist Kerberos seit Windows 2003 und XP als „Integrierte Windows-Anmeldung“ bekannt und ersetzt damit NTLM.

Parameter:

useFullPrincipal

Legt fest, ob der vollständige Kerberos-Anmeldename inklusive @-Zeichen und Realm (Wert true) oder ohne @ und Realm (Wert false) als FirstSpirit-Benutzername verwendet wird. false ist bei Systemen ausreichend, deren Benutzerkonten alle in einem Kerberos-Realm (entspricht unter Windows einer Active Directory Domain) eingetragen sind. Falls Anmeldungen von mehreren Kerberos-Realms oder Active Directory Domains erfolgen, muss true angegeben werden, da meistens der reine Benutzername über mehrere Domains nicht eindeutig ist.          
Standardwert: false

userAgents

Hier kann ein Suchmuster angegeben werden, um die Kerberos-Anmeldung nur für ausgewählte Webbrowser zu aktivieren, da Kerberos einen nicht ganz standardkonformen HTTP-Header ("WWW-Authenticate: Negotiate") verwendet, den einige ältere Webbrowser als Fehler interpretieren. Um Kerberos bei allen Webbrowsern zu verwenden ".*" eintragen.                
Standardwert: .*(Chrome|Firefox|Iceweasel|Konqueror|MSIE|Trident|Opera|Safari|Shiretoko).*

sendAccepted

Über diesen Parameter kann der HTTP-Statuscode beim Handshake beeinflusst werden. Bei einem erfolgreichen Handshake wird OK (200) gesendet. Vor FirstSpirit-Version 5.2R2 wurde ACCEPTED (202) gesendet. Abhängig von der eingesetzten Infrastruktur wird dieser Status (202) nicht als „gültig“ akzeptiert, was beispielsweise zu Problemen bei der Indizierung führen kann (bekanntes Problem: SharePoint Crawler unter Windows). Das Standardverhalten wurde daher mit 5.2R2 umgestellt. Das alte Verhalten kann wiederhergestellt werden, indem der Parameter sendAccepted auf den Wert true gesetzt wird (Standardwert: false). Dieser Parameter kann nur über einen entsprechenden Eintrag in der Datei fs-jaas.conf (Bereich websso) gesetzt werden:

de.espirit.firstspirit.server.authentication.KerberosLoginModule sendAccepted="true";

Das KerberosLoginModule wird im Bereich websso der Datei fs-jaas.conf eingetragen. Zusätzlich muss folgender neuer Bereich in derselben Datei am Dateiende eingefügt werden:

com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
    principal="HTTP/fs5host.mydomain.net@MYDOMAIN.NET"
    keyTab="/opt/firstspirit5/conf/fs5host-HTTP.keytab"
    useKeyTab="true"
    storeKey="true"
    isInitiator="false"
    doNotPrompt="true"
    debug="true";
};

Die Pfade und Domain-Bezeichnungen müssen entsprechend des lokalen Systems angepasst werden. Folgende Parameter sind anzupassen:

principal

Hier wird der Service-Principal-Name des FirstSpirit-Servers angegeben.

keyTab

Hier wird der Pfad zur Kerberos-Keytab-Datei angegeben, die den privaten Schlüssel, meistens in verschiedenen Verschlüsselungsverfahren (z. B. DES und AES), passend zum Service-Principal-Name enthält. Diese Datei muss zunächst erstellt werden, wie im nachfolgenden Abschnitt beschrieben.

Hinweise zum Service-Principal-Name (SPN):

Das Schlüsselwort „HTTP“ gilt für die Verwendung von HTTP und HTTPS.

Der im SPN angegebene Hostname inklusive DNS-Domain muss der wirkliche Hostname des Servers sein. Falls ein virtueller Webserver verwendet wird, gibt es zwei Möglichkeiten: Sofern der virtuelle Webserver als CNAME-record im DNS eingetragen ist, wird im SPN der Hostname eingetragen, auf den der CNAME verweist. Falls der virtuelle Webserver als A-record im DNS eingetragen ist, wird der im A-record eingetragene Hostname im SPN verwendet. In beiden Fällen muss die IP-Adresse, auf den der im SPN eingetragene Hostname zeigt, wieder zurück auf den Hostnamen im SPN verweisen.

Erstellen der Kerberos-Keytab-Datei im Beispiel unter Microsoft Active Directory:

Zum Erstellen der Datei auf einem Kerberos-Server in einer Microsoft Active Directory Domain werden die zusätzlich zu installierenden Windows Support Tools benötigt, die von Microsoft auf den Installationsmedien des Betriebssystems mitgeliefert werden oder von http://microsoft.com heruntergeladen werden können.

Auf dem Windows Domain-Controller wird zunächst ein normales Benutzerkonto angelegt. Das Passwort darf nicht ablaufen und der Benutzer darf es nicht ändern können. Das Passwort ist irrelevant und wird im nächsten Schritt überschrieben. Als Benutzername sinnvollerweise „Hostname“-„Dienstname“ angeben, also beispielsweise fs5host-HTTP. Um die Sicherheit zu erhöhen, kann die Option „Benutzer bei Delegierung nicht vertrauen“ aktiviert werden.

Nun wird auf dem Windows Domain-Controller ein privater Schlüssel zum Service-Principal-Name mit AES256-SHA1-Verschlüsselung erstellt:

ktpass -princ HTTP/fs5host.mydomain.net@MYDOMAIN.NET \
+rndpass -mapuser fs5host-HTTP \
-crypto AES256-SHA1 –ptype KRB5_NT_PRINCIPAL \
-out fs5host-http-aes256.keytab

Falls die verwendete Version des ktpass kein +rndpass bietet, kann hier auch ein manuell eingegebenes Zufallspasswort über -pass PASSWORT verwendet werden.

Hinweis: Die unsichere RH4-Verschlüsselung wird von Java 17 nicht mehr unterstützt.

Ein Aufruf von ktpass –h zeigt die verfügbaren Kryptoalgorithmen an, wobei zu beachten ist, dass diese nur verwendet werden, wenn sie von allen anderen Domain-Servern und dem jeweiligen Client unterstützt werden.

Falls Probleme auftreten, kann folgendermaßen die Liste aller Service-Principal-Namen des Benutzerkontos angezeigt werden:

setspn -l fs5host-HTTP

Falls Fehler bei der Eingabe erfolgten, kann ein Service-Principal-Name über folgenden Aufruf entfernt werden:

setspn -d HTTP/fs5host.mydomain fs5host-HTTP

Die über ktpass erstellte keytab-Datei wird nun auf den FirstSpirit-Server bzw. den externen Application-Server kopiert, zu dem Pfad, wie er in fs-jaas.conf bei keyTab angegeben ist.
Beispiel: /opt/firstspirit5/conf/fs5host-HTTP.keytab.

Eine Überprüfung der Datei kann über folgenden Aufruf unter Unix erfolgen:

kinit -V -k –t fs5host-HTTP.keytab HTTP/fs5host.domain.net@DOMAIN.NET

Als Resultat sollte "Authenticated to Kerberos v5" angezeigt werden.

Falls mehrere Kryptoalgorithmen verwendet werden, müssen die einzelnen gerade erzeugten Keytab-Dateien zunächst zusammengefügt werden. Dazu das Dienstprogramm ktutil unter Unix starten:

/usr/sbin/ktutil

und folgende Eingaben vornehmen, um die Keytab-Datei im wie in fs-jaas.conf bei keyTab angegebenen Pfad abzulegen:

rkt krb5-fs5host-HTTP-aes256.keytab
wkt /opt/firstspirit5/conf/fs5host-HTTP.keytab
q

Falls für den FirstSpirit-Server ein externer Application-Server eingesetzt wird, muss folgender Parameter, beispielsweise für Tomcat über die Umgebungsvariable „CATALINA_OPTS“ dem Applications-Server beim Start übergeben werden:

-Djava.security.auth.login.config=/opt/firstspirit5/conf/fs-jaas.conf

Die Verwendung von Kerberos-Tickets vergrößert den HTTP-Request-Header auf bis zu einige KByte Länge, die die Standardkonfiguration bezüglich der Maximallänge von teilweise nur 4 kByte bei einigen Webservern überschreitet. Hier die Konfiguration für verschiedene Webserver, um die maximale Länge des HTTP-Request-Header zu vergrößern:

Tomcat:
In der Datei tomcat/conf/server.xml im Abschnitt <Connector protocol="HTTP/1.1" folgenden Parameter hinzufügen:

 maxHttpHeaderSize="65536"

Apache httpd:
In der Datei httpd.conf, oder bei virtuellen Hosts der äquivalenten Datei, folgenden Parameter hinzufügen:

 LimitRequestLine 65536

Falls die Kerberos-Server nicht über DNS ermittelt werden können, also keine SRV-Record wie _kerberos._udp.mydomain.net oder _kerberos._tcp.mydomain.net vorhanden sind, wird auf Server-Seite die Datei /etc/krb5.conf bzw. c:\windows\krb5.ini benötigt:

[libdefaults]
default_realm = MYDOMAIN.NET

[domain_realm]
.mydomain.net = MYDOMAIN.NET
mydomain.net = MYDOMAIN.NET

[realms]
MYDOMAIN.NET = {
kdc = dc1.mydomain.net
kdc = dc2.mydomain.net
kdc = dc3.mydomain.net
default_domain = mydomain.net
}

Die Konfiguration der Kerberos-basierten passwortlosen Anmeldung ist nun auf Server-Seite abgeschlossen.

Protokolliert werden die Kerberos-Fehlermeldungen in den Dateien /opt/firstspirit5/log/fs-server.log und /opt/firstspirit5/log/fs-wrapper.log sowie, falls Tomcat als externer Application-Server eingesetzt wird, in tomcat/logs/firstspirit.log.

Sobald die Kerberos-basierte Anmeldung von den Arbeitsplatzrechnern erfolgreich getestet wurde, muss in der Datei /opt/firstspirit5/conf/fs-jaas.conf der Parameter debug="true" in debug="false" geändert werden, um unnötig viele Logmeldungen zu vermeiden.

Sofern die Anmeldung nicht funktioniert, sollte zunächst in den Log-Dateien des FirstSpirit-Servers (fs-wrapper.log und fs-server.log) sowie bei Verwendung eines externen Application-Servers in dessen Log-Datei (z. B. firstspirit.log und catalina.out) nachgesehen werden. Ein häufiger Fehler sind zu große Zeitdifferenzen der einzelnen Rechneruhren, die bei Verwendung von Kerberos im Bereich von wenigen Minuten synchron laufen müssen.

Konfiguration der Clients

Auf Client-Seite sind abhängig vom verwendeten Webbrowser folgende Konfigurationen notwendig (falls passwortlose Kerberos-basierte Anmeldung bereits auf den Arbeitsplatzrechnern für andere Webserver innerhalb des Unternehmens-Netzes verwendet wird, ist keine Konfigurationsänderung notwendig):

Firefox (Windows, Mac OS, GNU/Linux):                         
Als URL in der Adresszeile about:config eingeben und bei dem Parameter network.negotiate-auth.trusted-uris den Domain-Namen des FirstSpirit-Servers mit führendem Punkt eintragen. Es können mehrere Domains durch Komma getrennt eingetragen werden. Beispiel: .mydomain.net    

Safari (Mac OS):                   
Mac OS bietet bereits standardmäßig eine vollständige Kerberos-Integration, sofern das verwendete Benutzerkonto ein Netzwerk-basiertes Benutzerkonto ist und der Arbeitsplatzrechner an der Active Directory Domain bzw. Kerberos-Realm angemeldet ist. Es ist keine Konfigurationsänderung notwendig. Bei lokalen Benutzerkonten erfolgt beim ersten Zugriff auf die FirstSpirit-Startseite eine Abfrage des eigenen Kerberos-Benutzernames (benutzername@MYDOMAIN.NET) Principals inklusive Passwort.

Konqueror (GNU/Linux):    
Sofern Kerberos im Betriebssystem des Arbeitsplatzrechners aktiviert wurde, also ein Kerberos-Ticket automatisch über /etc/pam.d/common-auth beim Anmelden und Entsperren des Bildschirms angefordert wird, ist keine weitere Konfiguration notwendig.

Falls Probleme beim Einrichten der Kerberos-basierten Anmeldung auftreten, kann Firefox mit Debug-Log gestartet werden, um zu sehen, welches Ticket der Browser sendet.

Windows:
Eingabeaufforderung starten (cmd.exe) und eingeben:      

set NSPR_LOG_MODULES=negotiateauth:5         
cd "\program files\mozilla firefox"  || bzw. Pfad zur Firefox-Installation
firefox -console

Unix:
Terminal-Fenster (konsole, xterm, o.ä.) öffnen und eingeben:

export NSPR_LOG_MODULES=negotiateauth:5
firefox
Wichtig Sicherheitshinweis: Das KerberosLoginModule sollte aus Sicherheitsgründen in Produktivsystemen zur erfolgreichen Verhinderung von Wiedereinspielungsangriffen (Replay-Attacks) nur in Verbindung mit HTTPS eingesetzt werden!

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.4 | Datenschutz