Der Einfachheit halber werden in diesem Tipps & Tricks-Beitrag folgende Abkürzungen verwendet:
KDC
Key Distribution Center
FQHN
Full qualified hostname
Folgende Beispiele werden für die Konfiguration verwendet:
KDC ist erreichbar unter: kdc.example.org
FQHN des Tomcat-Servers lautet: tomcat.example.org
Domäne lautet: EXAMPLE bzw. EXAMPLE.ORG
Tomcat-AD-Benutzer-Login: tomcat_user
Tomcat-AD-Benutzer-Passwort: GEHEIMES_PASSWORT
1. Vorbereitungen auf dem Domain-Controller
Es muss ein AD-Benutzerkonto für den Tomcat-Dienst mit folgenden aktivierten Optionen erstellt werden:
Kennwort läuft nie ab
Benutzer kann Kennwort nicht ändern
Dieses Konto unterstützt Kerberos-AES-128-Bit-Verschlüsselung
(Das Passwort lautet hier im Beispiel GEHEIMES_PASSWORT)
Es muss ein SPN (Service Principal Name) erstellt und dem Tomcat-Benutzerkonto zugewiesen werden. Dabei muss die
Groß-/Kleinschreibung beachtet werden. Stellen Sie sicher, dass für den Benutzer
keine SPN registriert sind. Über folgende Befehle wird der SPN dem Tomcat-Benutzer zugewiesen:
setspn -A HTTP/tomcat.example.org tomcat_user
setspn -A HTTP/tomcat tomcat_user
Mit dem Befehl setspn -L tomcat_user kann überprüft werden, ob für den Benutzer bereits SPN registriert sind.
Sind für den Benutzer bereits SPN registriert, so können die Einträge über folgenden Befehl wieder entfernt werden:
Der Tomcat-Dienst muss sich beim Start am KDC (Active Directory Server) registrieren. Dafür wurde zuvor auf dem AD
ein Benutzer mit entsprechendem Passwort erstellt.
Damit diese Informationen dem Tomcat-Dienst beim Start zur Verfügung stehen, muss eine Keytab-Datei
mit den benötigten Logindaten erzeugt werden. Für die Generierung dieser Datei ist das Java-Tool ktab.exe
empfohlen. Dieses ist in der Windows-JRE enthalten und ist somit z.B. auch auf einem Client mit
einer Portal Manager-Installation bereits vorhanden. Die ktab.exe muss dann auch auf einem Rechner der Domäne
ausgeführt werden, da beim Ausführen Informationen vom KDC bezogen werden.
Später wird die erzeugte Datei auf den Tomcat-Server kopiert. Folgende Schritte erzeugen die Datei:
Wechseln Sie in der Eingabeaufforderung in das bin-Verzeichnis der Intrexx-JRE nach
c:/Program Files/intrexx/jre/windows/amd64/bin.
Erzeugen Sie die Keytab. tomcat_user und GEHEIMES_PASSWORT, sowie der Ausgabepfad der Datei müssen natürlich
entsprechend angepasst werden:
ktab.exe -a tomcat_user GEHEIMES_PASSWORT -n 0 -k c:/PATH/TO/KEYTAB.FILE/tomcat.keytab
Die damit erzeugte Datei muss dann auf den Intrexx-Server kopiert und entsprechend geschützt werden, da sie
die Anmeldeinformationen der Tomcat-Benutzers enthält.
Hier eine kurze Erläuterung der einzelnen Optionen:
-a fügt SPN und Passwort hinzu
-k gibt die Keytab-Datei an, in die geschrieben wird
-n0 wird benötigt um den Keytab-Zähler(KVNO) auf 0 zu setzen
Ktpass.exe, das auf AD-Servern bereits installiert ist, sollte für die Generierung der Keytab
nicht verwendet werden.
3. Installation auf Intrexx-Seite
3.1. Spnego-Bibliothek in Tomcat einbinden
Bei einer Intrexx 8-Neuinstallation ist die Bibliothek bereits automatisch eingebunden, d.h. dieser Punkt kann
übersprungen werden. Wird von einer älteren Version auf Intrexx 8 gewechselt, indem bei der Installation in das bestehende
Verzeichnis installiert wird, muss das entsprechende Modul eventuell manuell eingebunden werden.
Die entsprechende Bibliothek liegt im Installationsverzeichnis /lib
und lautet spnego-r7.jar. Damit Tomcat diese auch verwendet, muss in der tomcat.wcf
im Installationsverzeichnis /cfg
ein Eintrag gesetzt werden:
wrapper.java.classpath.XX=lib/spnego-r7.jar
Die Numerierung XX muss entsprechend der bestehenden classpath-Einträge eindeutig sein.
3.2. spnego.login.conf sowie spnego.krb5.conf anpassen
Die Keytab wurde erstellt und auf den Intrexx-Server kopiert. Sie wird nun in der
spnego.login.conf eingebunden, die dann später wiederum in der web.xml eingebunden wird.
Der Einfachheit halber legen wir im Folgenden alle von Tomcat verwendeten Dateien im Beispiel-Pfad
C:/PATH/TO/KEYTAB.FILE/ ab. Dort sollte bereits die Keytab tomcat.keytab liegen. Die spnego.login.conf sowie die spnego.krb5.conf
werden wir ebenso dort ablegen. Beispiele der beiden Dateien liegen im
Installationsverzeichnis /samples/tomcat_kerberosauth/doc. Diese können
einfach in den oben genannten Pfad kopiert werden, und dann entsprechend angepasst werden.
Die beiden entscheidenden Einträge in der spnego.login.conf sind der Pfad zur Keytab (also der keyTab= Eintrag)
sowie der Tomcat-AD-Benutzer (der principal= Eintrag). Die spnego.login.conf sieht dann mit den hier
im Beispiel verwendeten Einstellungen wie folgt aus:
In der spnego.krb5.conf müssen die Kerberos Realm-Einträge entsprechend angepasst werden. Diese entsprechen
erfahrungsgemäß dem Domänen-Eintrag. Die Einträge müssen in Großbuchstaben geschrieben werden.
Die spnego.krb5.conf sieht dann wie folgt aus:
Die zuvor erstellten Dateien (also spnego.login.conf sowie spnego.krb5.conf) werden letztendlich
in der web.xml eingebunden. Die web.xml befindet sich im
Portalverzeichnis /external/htmlroot/WEB-INF/.
Dort befindet sich per Default ein auskommentierter Eintrag für den SpnegoFilter. Dieser muss
entkommentiert werden, und der Pfad auf die beiden Dateien entsprechend angepasst werden,
so dass der entsprechende Abschnitt dann wie folgt aussieht:
Nach dem Neustart des Tomcat-Dienstes
sollte Tomcat sich nun am KDC authentifizieren. Ob dies erfolgreich war, kann man im tomcat_startup.log überprüfen.
INFO | jvm 1 | 2016/05/18 15:28:28 | Debug is true storeKey true useTicketCache false useKeyTab true doNotPrompt false ticketCache is null isInitiator true KeyTab is ///C:/PATH/TO/KEYTAB.FILE/tomcat.keytab refreshKrb5Config is false principal is tomcat_user tryFirstPass is false useFirstPass is false storePass is false clearPass is false
INFO | jvm 1 | 2016/05/18 15:28:28 | principal is tomcat_user@EXAMPLE.ORG
INFO | jvm 1 | 2016/05/18 15:28:28 | Will use keytab
INFO | jvm 1 | 2016/05/18 15:28:28 | Commit Succeeded
3.5. Einträge in der LucyAuth.cfg sowie in der om.cfg
Im Folgenden wird die Einrichtung auf Intrexx-Seite beschrieben.
Damit Intrexx bzw. das entsprechende Portal das Kerberos-Modul für die
Authentifizierung verwendet, muss in der LucyAuth.cfg noch ein entsprechender Login-Provider
hinzugefügt werden, und dieser dann in der om.cfg für den entsprechenden Dienst eingebunden
werden. Beide Dateien liegen im Portalverzeichnis /internal/cfg.
Für den Eintrag in der LucyAuth.cfg liegt im Installationsverzeichnis /samples/tomcat-kerberosauth/doc/
eine LucyAuth.cfg, die Beispiel-Einträge enthält.
Im Allgemeinen sollte der TomcatKerberosAuth2-Eintrag genügen. Unterscheidet sich der UserPrincipalName vom sAMAccount-Name,
empfiehlt sich der TomcatKerberosAuth3-Eintrag.
Beispiel
Im Active Directory lautet der aSAMAccount-Eintrag des Benutzers Heinrich Müller PRE2000EXAMPLE\heinrichm. Der UserPrincipalName
desselben Benutzers lautet heinrich.mueller@example.org. Der Benutzer-Import wurde mit dem ActiveDirectory NTLM compatible durchgeführt.
Falls der Prä2000-Domainname vom UserPrincipal-Domainname abweicht, kann die Prä2000-Domain explizit mit dem folgenden Eintrag
in der LucyAuth.cfg übergeben werden:
Falls mehrere Domänen verwendet werden, können diese auch per Groovy-Script umfangreicher konfiguriert werden. In diesem
Fall bietet der Eintrag TomcatKerberosAuth4 die Möglichkeit auf ein Groovy-Script zu verweisen, und dort zusätzliche
Konfigurationen vorzunehmen. Damit die Änderungen greifen, muss der Portaldienst
neu gestartet werden.
4. Browser-seitige Anpassungen
4.1. Internet Explorer
Der Tomcat-Server muss unter Internetoptionen / Sicherheit / Sites hinzugefügt werden,
in diesem Beispiel als tomcat.example.org.
4.2. Firefox
Geben Sie in der Addressleiste about:config ein. Der Tomcat-Server muss unter network-negotiate-auth.trusted-uris
hinzugefügt werden.
5. Test
Nachdem der Portal- als auch der Tomcat-Dienst neugestartet wurden, kann man die Authentifizierung mit einem beliebigen Benutzer der AD testen.
Nach dem Anmelden am Windows-System sollte dieser Benutzer - sofern er eben ein Benutzer aus der Domäne ist - ein Kerberos-Ticket erhalten, was
über folgenden Befehl überprüft werden kann:
klist tgt
Nun kann das Portal im Browser aufgerufen werden. Falls die Anmeldung scheitern sollte, hilft ein Blick in die portal.log,
die Sie im Portalverzeichnis /log finden, weiter.
Dort werden bei einem gescheiterten Anmeldevorgang die entsprechenden Login-Daten protokolliert. Falls die dortigen Anmeldeinformationen
nicht mit den Login-Daten des entpsrechenden Intrexx-Benutzers übereinstimmen, muss das bei der Benutzer-Replikation entsprechend berücksichtigt
werden, indem bspw. ein anderes Profil verwendet wird bzw. das verwendete Replikationsprofil entsprechend angepasst wird.
Ob eine Kerberos-Authentifizierung unter Tomcat auf dem Zielsystem erfolgreich umgesetzt werden kann,
ist stark von der Systemumgebung (Active Directory / Netzwerk) abhängig.