rene_charbonnea
I'm new here

Probleme mit der Kerberos SSO Konfiguration

Jump to solution

Hallo zusammen,

entschuldigt bitte das ich (schon wieder) mit dummen Fragen nerve.

Ich habe in den letzten 2 Wochen an der Konfiguration unseres neuen Linux (Debian Squeeze) basierten Firstspirit Entwicklungsservers gearbeitet.

Ziel war es dabei, dass der

1) der alte Server auf neue saubere Beine gestellt wird (Debian Squeeze als OS, aktuelles Firstspirit Release) => erfolgreich

2) der Firstspirit Server nicht mehr mit Jetty sondern mit einer Kombi aus Apache2 und Tomcat6 läuft => erfolgreich

2.1) Apache2 und Tomcat6 sollten aus der Debian Paketverwaltung installiert werden um einfachere Updates zu ermöglichen => erfolgreich

3) der Firstspirit Server sollte ausschließlich via https (Port 443) erreichbar sein (erfolgreich)

4) die Firstspirit User sollten nicht aus der internen Benutzerverwaltung sondern aus dem LDAP kommen => erfolgreich

5) von unseren Firmenrechnern aus sollte ein Single Sign On via Kerberos durchgeführt werden um ein anmelden am Firstspirit nicht notwendig zu machen => noch NICHT erfolgreich

Wie ihr seht bin ich fast fertig und habe mich heute morgen an die SSO/Kerberos Thematik gemacht.

Allerdings war mir irgendwie fast klar, dass auch beim x-ten Versuch (habe schon anderen Systeme erfolgreich Kerberos beigebracht) nicht alles auf Anhieb klappen würde. Smiley Wink

Aber fangen wir vorne an:

Ich habe angefangen im Admin Handbuch im Kapitel 4.3.4.5 zu lesen was für Kerberos notwendig ist.

Als erstes habe ich (wie angegeben) unter /opt/firstspirit4/fs-jaas.conf im Bereich websso

den Modulnamen "de.espirit.firstspirit.server.authentication.KerberosLoginModule" hinten (habe es aber zur Sicherheit auch mal vor das LDAP Modul gesetzt) eingefügt.

Der betreffende Bereich sieht nun wie folgt aus:

/* web authentication (for preview, webedit, webmonitor) with sso */

websso {

        de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;

        // de.espirit.firstspirit.server.authentication.NTLMLoginModule optional domains=":my-netbois-doma$

        // de.espirit.firstspirit.server.authentication.WindowsLoginModule optional;

        de.espirit.firstspirit.server.authentication.LdapLoginModule optional section="LDAP";

        de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;

        de.espirit.firstspirit.server.authentication.KerberosLoginModule;

};

Direkt danach habe ich dann wie beschrieben am Dateiende folgendes eingefügt:

com.sun.security.jgss.accept {

com.sun.security.auth.module.Krb5LoginModule required

principal="HTTP/fsprod01.hlp.de@HLP.DE"

keyTab="/opt/firstspirit4/conf/kerbfs4prod01-rc4.keytab"

useKeyTab="true"

storeKey="true"

isInitiator="false"

doNotPrompt="true"

debug="true";

};

Ja da sind Zeilenumbrüche drin! Habe mit "nano" keine so schönen Einrückungen wie im Handbuch hin bekommen. Smiley Wink

Dann habe ich (wie angegeben) auf unserem Domain Controller zuerst einen User angelegt und dann per "ktpass" eine Keytab-Datei erstellt.

Diese habe ich dann per WinSCP nach /opt/firstspirit4/conf/ kopiert.

Als vorletzten Schritt habe ich dann die Datei /etc/defaults/tomcat6 editiert:

[...]

# You may pass JVM startup parameters to Java here. If unset, the default

# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC

#

# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved

# response time). If you use that option and you run Tomcat on a machine with

# exactly one CPU chip that contains one or two cores, you should also add

# the "-XX:+CMSIncrementalMode" option.

JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC"

[...]

# Einstellungenuer Firstspirit SSO

JAVA_OPTS="${JAVA_OPTS} -Djava.security.auth.login.config=/opt/firstspirit4/conf/fs-jaas.conf"

Denn für mich gibt es keinen Unterschied zwischen CATALINA_OPTS und JAVA_OPTS...

Zum Abschluss habe dann die Datei /etc/krb5.conf erstellt:

[libdefaults]

default_realm = HLP.DE

[domain_realm]

.hlp.de = HLP.DE

hlp.de = HLP.DE

[realms]

HLP.DE = {

  kdc = ldap.hlp.de

}

Anschließend ein /etc/init.d/tomcat6 restart und ein /etc/init.d/fs4 restart und den Firefox konfiguriert.

Beim Zugriff auf die Seite erhalte ich nun aber folgende Fehlermeldung:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
     de.espirit.firstspirit.server.authentication.FSConfigFile.getAppConfigurationEntry(FSConfigFile.java:50)
     de.espirit.firstspirit.server.authentication.AuthenticationManagerImpl.createLoginContext(AuthenticationManagerImpl.java:211)
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     java.lang.reflect.Method.invoke(Method.java:597)
     de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
     de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
     de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:67)
     de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
     de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
     de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
     java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
     java.util.concurrent.FutureTask.run(FutureTask.java:138)
     de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
     java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
     java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
     java.util.concurrent.FutureTask.run(FutureTask.java:138)
     java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
     de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)
     de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)
     de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)
     $Proxy17.createLoginContext(Unknown Source)
     de.espirit.firstspirit.server.authentication.AuthenticationManagerProxy.createLoginContext(AuthenticationManagerProxy.java:52)
     de.espirit.firstspirit.io.servlet.WebAuthentication.authenticate(WebAuthentication.java:754)
     de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:462)
     de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:143)



note The full stack trace of the root cause is available in the Apache Tomcat/6.0.28 logs.



Damit stehe ich aber etwas auf dem Schlauch. Kann mir jemand sagen wo ich den Fehler gemacht habe? Ich sehe gerade mal wieder den Wald vor lauter Bäumen nicht mehr.

Grüße aus Eschborn

René

EDIT: Die Build Nummer von Firstspirit ist übrigens 4.2.432.43881 falls das irgendwie hilft!

0 Kudos
1 Solution

Accepted Solutions
rene_charbonnea
I'm new here

Hallo zusammen,

so wie es aussieht habe ich den Fehler gefunden!

Der Eintrag "de.espirit.firstspirit.server.authentication.KerberosLoginModule;" muss eigentlich so aussehen "de.espirit.firstspirit.server.authentication.KerberosLoginModule optional;"

Bei Eintragung mehrerer Login-Module werden diese in der angegebenen Reihenfolge abgearbeitet, bis eine erfolgreiche Authentifizierung des Benutzers erfolgt ist. Es sollte darauf geachtet werden, dass passwortlose Authentifizierungsverfahren mit Berechtigungsnachweis vor solchen mit Passwortüberprüfung eingetragen werden. Zusätzlich muss jedem Login-Modul das JAAS-Attribut optional zugewiesen werden. "Optional" bedeutet hier, dass mindestens eines der Login-Module eine erfolgreiche Authentifizierung durchgeführt haben muss, um dem Benutzer die Anmeldung an FirstSpirit zu erlauben. Andere JAAS-Attribute wie sufficient, required oder requisite dürfen für FirstSpirit nicht verwendet werden, da ansonsten FirstSpirit-spezifische Anmeldeattribute nicht von einem Login-Modul an das nächste weitergereicht werden. Diese FirstSpirit-spezifischen Anmeldeattribute sind auch der Grund dafür, dass externe JAAS-Module nur mit einer zusätzlichen Wrapper-Klasse für FirstSpirit verwendet werden können

Das Stand im Kapitel 4.3.4.8 welches diverse Seiten NACH der Kerberos Einrichtung zu finden ist.

Hier wäre es schön in der Doku einen besseren Hinweis oder ein Beispiel direkt an Ort und Stelle (also Kapitel 4.3.4.5) aufzunehmen.

View solution in original post

0 Kudos
1 Reply
rene_charbonnea
I'm new here

Hallo zusammen,

so wie es aussieht habe ich den Fehler gefunden!

Der Eintrag "de.espirit.firstspirit.server.authentication.KerberosLoginModule;" muss eigentlich so aussehen "de.espirit.firstspirit.server.authentication.KerberosLoginModule optional;"

Bei Eintragung mehrerer Login-Module werden diese in der angegebenen Reihenfolge abgearbeitet, bis eine erfolgreiche Authentifizierung des Benutzers erfolgt ist. Es sollte darauf geachtet werden, dass passwortlose Authentifizierungsverfahren mit Berechtigungsnachweis vor solchen mit Passwortüberprüfung eingetragen werden. Zusätzlich muss jedem Login-Modul das JAAS-Attribut optional zugewiesen werden. "Optional" bedeutet hier, dass mindestens eines der Login-Module eine erfolgreiche Authentifizierung durchgeführt haben muss, um dem Benutzer die Anmeldung an FirstSpirit zu erlauben. Andere JAAS-Attribute wie sufficient, required oder requisite dürfen für FirstSpirit nicht verwendet werden, da ansonsten FirstSpirit-spezifische Anmeldeattribute nicht von einem Login-Modul an das nächste weitergereicht werden. Diese FirstSpirit-spezifischen Anmeldeattribute sind auch der Grund dafür, dass externe JAAS-Module nur mit einer zusätzlichen Wrapper-Klasse für FirstSpirit verwendet werden können

Das Stand im Kapitel 4.3.4.8 welches diverse Seiten NACH der Kerberos Einrichtung zu finden ist.

Hier wäre es schön in der Doku einen besseren Hinweis oder ein Beispiel direkt an Ort und Stelle (also Kapitel 4.3.4.5) aufzunehmen.

0 Kudos