Shibboleth
Inhaltsverzeichnis
- 1 Hinweis zur Doku
- 2 Was ist Shibboleth
- 3 Links
- 4 Allgemein
- 5 IdP Identity-Provider
- 6 SP Service-Provider mittels Ubuntu Paketen installieren
- 7 SP Service-Provider
- 7.1 Version SP 2.xx Installation Doku Switch.ch
- 7.1.1 Voraussetzungen für die Installation von Shibboleth SP 2.xx
- 7.1.2 Pakete kompilieren
- 7.1.3 Vorbereitung des Arbeitsverzeichnis für Shibboleth
- 7.1.4 Shibboleth Abache2 Module installieren
- 7.1.5 Installation des Shibboleth-Daemon
- 7.1.6 Vorbereiten der Benutzerdefinierten konfiguration
- 7.1.7 Definieren der Shibboleth-Version
- 7.1.8 Selbstsignierte Zertifikate
- 7.1.9 Logging
- 7.2 Version SP 2.1 Konfiguration Doku DFN
- 7.3 SP testen
- 7.4 SP upgrade
- 7.5 SP 2.5.1 installieren
- 7.6 SP 2.5.2 installieren/upgrade
- 7.1 Version SP 2.xx Installation Doku Switch.ch
- 8 Ausgabe von Attributen (IDP)
- 9 IDP Zertifikate erneuern
- 10 IDP Status und Metadaten
- 11 SP Status und Metadaten
- 12 Single Logout
Hinweis zur Doku
Diese Doku entstand im wesentlichen mit Hilfe der AAI-DFN Dokumentation
Was ist Shibboleth
Auszug aus Wikipedia
Wikipedia
Shibboleth ist ein vom Internet2/MACE entwickeltes Verfahren zur verteilten Authentifizierung und Autorisierung für Webanwendungen und Webservices. Das Konzept von Shibboleth sieht vor, dass der Benutzer sich nur einmal bei seiner Heimateinrichtung authentisieren muss, um ortsunabhängig auf Dienste oder lizenzierte Inhalte verschiedener Anbieter zugreifen zu können (engl. Single Sign-On). Shibboleth basiert auf einer Erweiterung des Standards SAML.
Links
Allgemein
- verteilte Authentifizierung,Autorisierung und Rechteverwaltung (AAR)
- Google Usergroup
- Wiki Single LOG OFF
Internet2
DFN AAI
SAML Metadata Viewer
Allgemein
Die nachfolgende Beschreibung bezieht sich auf folgende Systemvoraussetzungen:
Debian Etch Tomcat 5.5 Shibbileth 1.3.3 Shibboleth IDP 2.0 Shibboleth SP 2.1
IdP Identity-Provider
IDP Version 1.3
Anpassungen in der Sources.list
Für die Installation von Tomcat wird das Java-Run-Time-Environment als auch das Java-Development-Kit
benötig. Diese findet sich im non-free Zweig von Debian.
Es muss eventuell die Datei /etc/apt/sources.list angepasst werden.
deb http://ftp.debian.org/debian etch main contrib non-free deb http://security.debian.org/ etch/updates main contrib non-free
Installation von Java
- Achtung, für Java werden die non-free Quellen benötigt:
deb http://ftp.debian.org/debian stable main contrib non-free deb http://security.debian.org/debian-security stable/updates main contrib non-free aptitude update aptitude install sun-java5-jdk
Konfiguration
Falls schon eine andere Version von Java installiert ist, kann man mit folgendem Befehl sicher stellen,
dass das Java-Kommando auf das eben installierte zegt:
update-alternatives --config java Auswahl Alternative ------------------------------------------------------- 1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java * 2 /usr/bin/gij-wrapper-4.1 + 3 /usr/lib/jvm/java-gcj/jre/bin/java --------------------------------------------------------
Mit auswahl der Nummer wird die richtige Version aktiviert. Hier die Nummer 3
Installation von Tomcat
aptitude install tomcat5.5
Konfiguration
/etc/default/tomcat5.5
TOMCAT5_SECURITY=no
Tomcat und SSL
Damit der IdP der mit der Unix-ID des Tomcat-Users läuft, auf die SSL-Zertifikate zugreifen kann,
müssen die Recht noch entsprechend angepasst werden:
Zertifikats-Speicher: /etc/ssl/private
# groupadd ssl-cert # adduser tomcat55 ssl-cert # chgrp ssl-cert /etc/ssl/private # chmod g+rw /etc/ssl/privat
Installation Apache2
# aptitude install apache2 libapache2-mod-jk # a2enmod jk # a2enmod ssl
Wenn die Benutzeranmeldung über einen LDAP realisiert wird, benötigt man noch folgendes Modul:
# a2enmod authnz_ldap
Danach dann einmal:
# /etc/init.d/apache2 force-reload
Installation Shibboleth IdP
- Mit wget wird das Shibbolethpaket auf den Server geladen.
Unter folgendem wget Link sind die aktuellen Pakete zu finden. Bitte immer erst nachschauen, welche Version die aktuellste ist.
- Wenn man sich für eine Versio entschieden hat, wird es mit wget auf den Server geladen:
- Java-Installation überprüfen. Es muss folgende Version aktiv sein:
/usr/lib/jvm/java-1.5.0-sun/jre/bin/java
Geprüft wird das mit folgendem Befehl:
# update-alternatives --config java There are 3 alternatives which provide `java'. Selection Alternative ----------------------------------------------- * 1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 2 /usr/bin/gij-wrapper-4.1 + 3 /usr/lib/jvm/java-gcj/jre/bin/java Press enter to keep the default[*], or type selection number:
- Jetz kann der Shibboleth IdP instaliert werden:
# cd /usr/local/src/ # wget http://shibboleth.internet2.edu/downloads/shibboleth-idp-1.3.3.tar.gz # tar xzvf shibboleth-idp-1.3.3.tar.gz # cd shibboleth-1.3.3-install # JAVACMD=/usr/bin/java ./ant
ACHTUNG: Hier können die Vorgaben mit Enter bestätigt werden. ACHTUNG: NUR die Angabe des Home-Verz. von Tomcat MUSS angepasst werden: /var/lib/tomcat5.5
- Rechte anpassen
# chown tomcat55 /usr/local/shibboleth-idp/logs # chmod 755 /usr/local/shibboleth-idp/bin/*
Konfiguration Shibboleth IdP
IDP Version 2.1
Installation
Anpassen der /etc/apt/sources.list
In der sources.list muss der non-free Eintrag vorhaden sein, damit das Java-Paket von SUN installiert werden kann:
# cat /etc/apt/sources.list deb http://ftp.debian.org/debian stable main contrib non-free deb http://security.debian.org/debian-security stable/updates main contrib non-free
Benötigte Pakete installieren
# aptitude update # aptitude install sun-java5-jdk tomcat5.5 apache2 libapache2-mod-jk
Java
# update-alternatives --config java Es gibt 3 Alternativen, die »java« bereitstellen. Auswahl Alternative ----------------------------------------------- 1 /usr/bin/gij-wrapper-4.1 + 2 /usr/lib/jvm/java-gcj/jre/bin/java * 3 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
# update-alternatives --config javac Es gibt 4 Alternativen, die »javac« bereitstellen. Auswahl Alternative ----------------------------------------------- 1 /usr/bin/ecj-bootstrap 2 /usr/bin/gcj-wrapper-4.1 + 3 /usr/lib/jvm/java-gcj/bin/javac * 4 /usr/lib/jvm/java-1.5.0-sun/bin/javac
# update-alternatives --config keytool Es gibt 3 Alternativen, die »keytool« bereitstellen. Auswahl Alternative ----------------------------------------------- 1 /usr/bin/gkeytool-4.1 + 2 /usr/lib/jvm/java-gcj/jre/bin/keytool * 3 /usr/lib/jvm/java-1.5.0-sun/jre/bin/keytool
Tomcat 5.5
Einige globale Java-Parameter müssen beim Tomcat-Start festgelegt werden.
Das IdP-Servlet braucht Zugriff auf das Filesystem und braucht mehr Speicher als von Debian in vorgesehen ist:
# vi /etc/default/tomcat5.5 CATALINA_OPTS="-Djava.awt.headless=true -Xmx512M -server -XX:MaxPermSize=512M" TOMCAT5_SECURITY=no
Tomcat starten
# /etc/init.d/tomcat5.5 start
Apache 2
Für den https-Support wird das Modul 'mod_ssl' benötigt:
# a2enmod ssl
Ausserdem braucht man noch für die Weiterleitung der Anfragen an den IdP der im Tomcat läuft das entsprechende Proxy-Modul für das Apache-Java-Protokoll:
# a2enmod proxy_ajp
Danach aktivieren Sie die Module mit:
# /etc/init.d/apache2 force-reload
Shibboleth-Identity-Provider installieren
- Eine aktuelle Version des Shibboleth IDP erhalten sie unter http://shibboleth.internet2.edu/downloads/shibboleth/idp/latest/
# cd /usr/local # wget http://shibboleth.internet2.edu/downloads/shibboleth/idp/latest/shibboleth-idp-2.[x]-bin.zip # unzip shibboleth-idp-2.[x]-bin.zip # cd identityprovider/
- Dann wird die Instalation gestartet:
# export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun # ./install.sh .... .... BUILD SUCCESSFUL Total time: 40 seconds
- Zugriffsrechte anpassen:
# chown tomcat55 /opt/shibboleth-idp-2.0.0/{metadata,logs}
- Die Shibboleth-Entwickler empfehlen noch folgende Änderungen an der Tomcat-Installation zu machen:
# rm /usr/share/tomcat5.5/common/endorsed/* # cp /usr/local/src/shibboleth-identityprovider-2.1.0/endorsed/* /usr/share/tomcat5.5/common/endorsed/
Welche Ausswirkungen diese Änderun auf andere Servlets (falls vorhanden), sollte getestet werden.
- Java-Installation noch um den shibboleth-security-Provider erweitern:
# cp /usr/local/src/shibboleth-identityprovider-2.1.0/lib/shibboleth-jce-1.0.0.jar /usr/lib/jvm/java-1.5.0-sun/jre/lib/ext/
- Um den Provider zu aktivieren muß noch ein Eintrag in der Java-Security-Config gemacht werden:
# vi /etc/java-1.5.0-sun/security/java.security
- Bitte nach den vorhandenen 'security.provider'-Einträgen einfügen und dabei die Zahl grösser wählen als die bei den schon vorhandenen.
security.provider.7=edu.internet2.middleware.shibboleth.DelegateToApplicationProvider
Shibboleth-Identity-Provider konfiguration
Zertifikat
Auch für den IDP wird ein Zertifikat benötigt.
- Zertifikats-Request erzeugen
# cd /opt/shibboleth-idp/credentials/ # openssl req -new -key idp.key -out idp.csr
Diese Request wird der DFN PKI mit dem Profil Shibboleth IDP/SP eingereicht und signiert.
- Zertifikat einbinden
# keytool -import -alias idp.example.com -file idp.crt -keystore idp.jks
Am besten benennt man das neue Zertifikat in idp.crt und idp.key um.
Bei der Installation wurden diese Dateien schon in den Konfigurationsdateien eingebunden.
Apache
# SingleSignOnService # https://idp.example.com/idp/profile/SAML2/POST/SSO # https://idp.example.com/idp/profile/SAML2/Redirect/SSO # https://idp.example.com/idp/profile/Shibboleth/SSO Listen [10.10.10.10]:443 # # Bitte 'idp.example.com' ersetzen durch den Namen Ihres IdPs! # <VirtualHost []10.10.10.10.:443> ServerName idp.example.com SSLEngine on SSLCertificateFile /opt/shibboleth-idp/credentials/idp.crt SSLCertificateKeyFile /opt/shibboleth-idp/credentials/idp.key #SSLCertificateChainFile /opt/shibboleth-idp/credentials/ca-chain.crt # alle Anfragen die mit /idp/ anfangen werden per Apache Java # Protokoll an Tomcat durchgereicht: <Location /idp> Allow from all </Location> ProxyPass /idp/ ajp://localhost:8009/idp/ </VirtualHost> # ArtifactResolutionService und AttributeService # # https://idp.example.com:8443/idp/profile/SAML1/SOAP/ArtifactResolution # https://idp.example.com:8443/idp/profile/SAML2/SOAP/ArtifactResolution # # https://idp.example.com:8443/idp/profile/SAML1/SOAP/AttributeQuery # https://idp.example.com:8443/idp/profile/SAML2/SOAP/AttributeQuery # Listen 8443 # Bitte 'idp.example.com' ersetzen durch den Namen Ihres IdPs! <VirtualHost [10.10.10.10]:8443> ServerName idp.example.com SSLEngine on SSLCertificateFile /opt/shibboleth-idp/credentials/idp.crt SSLCertificateKeyFile /opt/shibboleth-idp/credentials/idp.key SSLOptions +StdEnvVars +ExportCertData SSLVerifyClient optional_no_ca SSLVerifyDepth 10 #SSLCertificateChainFile /opt/shibboleth-idp/credentials/ca-chain.crt <Location /idp> Allow from all </Location> ProxyPass /idp/ ajp://localhost:8009/idp/ </VirtualHost>
Nachdem Sie Apache neu gestartet haben testen Sie bitte als erstes ob die Weiterleitung an Tomcat funktioniert indem Sie die URL
https://idp.example/idp/
aufrufen. Es sollte die Tomcat-Fehlermeldung 'The requested resource (/idp/) is not available' zu sehen sein da das IdP-Servlet noch nicht im Tomcat eingebunden ist. Sollten Sie aber eine Apache-Fehlermeldung bekommen (z.B. 'internal server error' oder 'permission denied') dann konsultieren Sie bitte die Apache-Logs um das Problem bei der Weiterleitung an Tomcat zu finden und zu beseitigen.
Tomcat
- Folgende Datei ist für die Tomcat-Konfiguration zuständig:
/etc/tomcat5.5/server.xml
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/> <GlobalNamingResources> <Environment name="simpleValue" type="java.lang.Integer" value="30"/> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8009" request.tomcatAuthentication="false" address="127.0.0.1" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server>
- Um das IdP-Servlet im Tomcat zu aktivieren erstellen Sie folgende Datei:
/var/lib/tomcat5.5/conf/Catalina/localhost/idp.xml
<Context docBase="/opt/shibboleth-idp/war/idp.war" privileged="true" antiResourceLocking="false" antiJARLocking="false" unpackWAR="false" />
Die "docBase" verweist auf den Link, so kann man bei einem Shibboleth-Update sich viel Arbeit sparen.
Man muss dann nur den Link umsetzen, statt die Konfigurationsdateien zu ändern.
- Jetzt kann der erste Test vorgenommen werden
Mit der URL
https://idp.example.com/idp/profile/Status
kan die Funktion getestet werden. Es sollt ein "ok" erscheinen.
IDP 2
- relying-party.xml
Die Kongurationsdateien des Identity-Providers liegen im Verzeichnis /opt/shibboleth-idp-2.0.0/conf. Die ant-Installationsroutine sollte schon die richtigen Voreinstellungen gemacht haben wenn Sie dabei den richtigen FQDN Ihres IdPs angegeben haben (vergleiche die Installationsanleitung!).
In relying-party.xml müssen Sie nur noch die URL zu den DFN-AAI-Test-Metadaten festlegen. Ausserdem sollten Sie unbedingt die Signatur-Verifikation nutzen die der IdP anbietet! Dazu brauchen Sie die Datei dfn-aai.pem welche unsere CA-Zertifikats-Kette enthält und auf unserer Metadaten-Seite heruntergeladen werden kann.
/opt/shibboleth-idp/relying-party.xml
... <!-- Metadaten über das Internet abgleichen --> <MetadataProvider id="URLMD" xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata" metadataURL="http://www.aai.dfn.de/fileadmin/metadata/DFN-AAI-Test-metadata.xml" backingFile="/opt/shibboleth-idp/metadata/metadata.xml" /> ... <security:Credential id="IdPCredential" xsi:type="security:X509Filesystem"> <security:PrivateKey>/opt/shibboleth-idp/credentials/idp.key</security:PrivateKey> <security:Certificate>/opt/shibboleth-idp/credentials/idp.crt</security:Certificate> </security:Credential> ...
SP Service-Provider mittels Ubuntu Paketen installieren
Installation
aptitude install shibboleth-sp2-common shibboleth-sp2-utils libapache2-mod-shib2
Konfiguration
SP Service-Provider
Version SP 2.xx Installation Doku Switch.ch
Die ursprüngliche engl. Doku finden sie hier
Voraussetzungen für die Installation von Shibboleth SP 2.xx
Installation benötigter Pakete
aptitude install apache2 openssl ntp gcc g++ make aptitude install libssl0.9.8 libssl-dev libcurl3 libcurl3-dev apache2-threaded-dev
Build-Verzeichnis erstellen
export MYBUILD=/usr/local/src/shib-sp-2.2 mkdir $MYBUILD
Download der benötigten Shibboleth-Pakete
cd $MYBUILD Webarchiv wget http://shibboleth.internet2.edu/downloads/log4shib/latest/log4shib-1.0.3.tar.gz Webarchiv wget http://mirror.switch.ch/mirror/apache/dist/xerces/c/2/sources/xerces-c-src_2_8_0.tar.gz Webarchiv wget http://xml.apache.org/security/dist/c-library/xml-security-c-1.5.1.tar.gz Webarchiv wget http://shibboleth.internet2.edu/downloads/opensaml/cpp/latest/xmltooling-1.2.2.tar.gz Webarchiv wget http://shibboleth.internet2.edu/downloads/opensaml/cpp/latest/opensaml-2.2.1.tar.gz Webarchiv wget http://shibboleth.internet2.edu/downloads/shibboleth/cppsp/latest/shibboleth-sp-2.2.1.tar.gz
Auspacken der Pakete
for f in $MYBUILD/*.tar.gz; do tar -xzvf $f -C $MYBUILD; done
Pakete kompilieren
Umgebungsvariablen anlegen
export SHIB_HOME=/opt/shibboleth-sp-2.1/ export XERCESCROOT=$MYBUILD/xerces-c-src_2_8_0/
Zielverzeichnis anlegen
mkdir $SHIB_HOME
1. Log4Shib:
cd $MYBUILD/log4shib-1.0.3/ ./configure --disable-static --disable-doxygen --prefix=$SHIB_HOME make make install
2. XercesC:
cd $MYBUILD/xerces-c-src_2_8_0/src/xercesc/ ./runConfigure -p linux -r pthread -P $SHIB_HOME make env XERCESCROOT=$XERCESCROOT make install
3. XML-Security:
cd $MYBUILD/xml-security-c-1.5.1 ./configure --without-xalan --prefix=$SHIB_HOME make env XERCESCROOT=$XERCESCROOT make install
4. XML-Tooling:
cd $MYBUILD/xmltooling-1.2.2/ ./configure --with-log4shib=$SHIB_HOME --prefix=$SHIB_HOME -C make make install
5. OpenSAML:
cd $MYBUILD/opensaml-2.2.1/ ./configure --prefix=$SHIB_HOME --with-log4shib=$SHIB_HOME -C make make install
6. Shibboleth Service Provider:
cd $MYBUILD/shibboleth-2.2.1/ ./configure --with-saml=$SHIB_HOME --enable-apache-22 --with-log4shib=$SHIB_HOME --prefix=$SHIB_HOME -C make make install
Vorbereitung des Arbeitsverzeichnis für Shibboleth
- Um nicht bei jeder neuen Shibboleth-Version die Konfigurationsdateien anpassen zu müssen, wird ein Link auf die aktuell verwendete Version angelegt. Wenn eine neue Version verwendet werden soll, muss nach der Installation nur der Link neu gesetzt werden
ln -s /opt/shibboleth-sp-2.1 /opt/shibboleth-sp2
Shibboleth Abache2 Module installieren
- Die Datei /etc/apache2/mods-available/shib.load anlegen:
# Load the shibboleth module LoadModule mod_shib /opt/shibboleth-sp2/lib/shibboleth/mod_shib_22.so
- Die Datei /etc/apache2/mods-available/shib.conf anlegen:
# Global Configuration # This is the XML file that contains all the global, non-apache-specific # configuration. Look at this file for most of your configuration parameters. ShibConfig /etc/shibboleth2/shibboleth2.xml # Used for example logo and style sheet in error templates. <IfModule mod_alias.c> <Location /shibboleth-sp> Allow from all </Location> Alias /shibboleth-sp/main.css /opt/shibboleth-sp2/share/doc/shibboleth/main.css Alias /shibboleth-sp/logo.jpg /opt/shibboleth-sp2/share/doc/shibboleth/logo.jpg </IfModule>
- Anpassen der Apache-Konfiguration
vi /etc/apache2/envvars ... ... # This file is generated from envvars-std.in # export LD_LIBRARY_PATH=/opt/shibboleth-sp2/lib
- Aktivieren des Apache Shibboleth Modul
a2enmod shib
Installation des Shibboleth-Daemon
- Das Startscript des Shibboleth-Deamon in das Verzeichnis /etc/init.d/ kopieren:
cp $SHIB_HOME/etc/shibboleth/shibd-debian /etc/init.d/shibd
- Das Startscript anpassen:
vi /etc/init.d/shibd PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC="Shibboleth 2 daemon" NAME=shibd SHIB_HOME=/opt/shibboleth-sp2/ SHIBSP_CONFIG=/etc/shibboleth2/shibboleth2.xml LD_LIBRARY_PATH=$SHIB_HOME/lib DAEMON=$SHIB_HOME/sbin/shibd SCRIPTNAME=/etc/init.d/$NAME PIDFILE=/var/run/$NAME.pid DAEMON_OPTS="" ...
- Init-Einträge in den Runlevel:
chmod +x /etc/init.d/shibd update-rc.d shibd defaults
Vorbereiten der Benutzerdefinierten konfiguration
ACHTUNG:
Die folgenden Schritte werden nur bei einer Neuinstallaton benötigt.
Bei einem Update wird durch die folgenden Schritte die Konfiguration überschrieben
- Verzeichnis für die Konfigurationsdateien anlegen
mkdir /etc/shibboleth2/
- Kopieren der benötigten Dateien
cp $SHIB_HOME/etc/shibboleth/native.logger /etc/shibboleth2/ cp $SHIB_HOME/etc/shibboleth/shibd.logger /etc/shibboleth2/ cp $SHIB_HOME/etc/shibboleth/syslog.logger /etc/shibboleth2/
cp $SHIB_HOME/etc/shibboleth/shibboleth2.xml /etc/shibboleth2/shibboleth2.xml
chgrp www-data /etc/shibboleth2/native.logger chmod g+w /etc/shibboleth2/native.logger
- Erstellen des Log-Verzeichnis
mkdir -p /var/log/shibboleth/ touch /var/log/shibboleth/shibd.log touch /var/log/shibboleth/native.log chgrp www-data /var/log/shibboleth/native.log chmod g+w /var/log/shibboleth/native.log
- Log-Konfiguration anpassen
- /etc/shibboleth/native.logger
- /etc/shibboleth/shibd.logger
Ich habe alle logs ausser:
#log4j.appender.native_log.layout=org.apache.log4j.BasicLayout
aktiviert. Es müssen vor allem die Pfade zur Log-Datei angepasst werden
# vi /etc/shibboleth/native.logger log4j.appender.shibd_log.fileName=/var/log/shibboleth/shibd.log log4j.appender.tran_log.fileName=/var/log/shibboleth/transaction.log
# vi /etc/shibboleth/shibd.logger log4j.appender.native_log.fileName=/var/log/shibboleth/native.log
Definieren der Shibboleth-Version
Wenn noch nicht geschehen (siehe "Vorbereitung des Arbeitsverzeichnis für Shibboleth"), dann solte jetzt ein Link auf die verwendete Shibboleth-Version gestezt werden:
ln -s /opt/shibboleth-sp-2.1 /opt/shibboleth-sp2
Selbstsignierte Zertifikate
ACHTUNG:
Nur nötig, wenn keine Zertifikate einer officiellen CA zur Verfügung stehen!
- Zertifikate erzeugen
cp /opt/shibboleth-sp-2.1/etc/shibboleth/keygen.sh /etc/shibboleth2/ /etc/shibboleth2/ sh keygen.sh -h sp.example.org -y 3 -e https://sp.example.org/shibboleth
Logging
The Shibboleth Apache module log is configured by /etc/shibboleth2/native.logger
The Shibboleth daemon and the transaction log are configured by /etc/shibboleth2/shibd.logger
Version SP 2.1 Konfiguration Doku DFN
SP testen
https://sp.example.org/Shibboleth.sso/Session https://sp.example.org/Shibboleth.sso/Status https://sp.example.org/Shibboleth.sso/Metadata https://sp.example.org/Shibboleth.sso/Login
Shibboleth Konfigurationsfile testen
/opt/shibboleth-sp2/sbin/shibd -t -c /etc/shibboleth2/shibboleth2.xml
showAttributValues
- Um mit https://sp.example.org/Shibboleth.sso/Session Attributwerte sehen zu können, muss in der Datei /etc/shibboleth2/shibbileth2.xml folgender Wert gesetzt werden.:
# vi /etc/shibboleth2/shibbileth2.xml <Handler type="Status" Location="/Status" acl="127.0.0.1 172.26.5.1"/> <Handler type="Session" Location="/Session" showAttributeValues="true"/>
- Achtung, der Zugriff sollte unbediengt auf seine eigene IP eingegrentzt werden. Datenschutz
SP upgrade
- Änderungen in der Konfiguration nach Versions-Upgrades
- WICHTIG: Immer in den Logfiles nach WARN, ERROR,CRIT suchen
Upgrade SP2.1 -> SP2.2
shibboleth2.xml
- SecurityPolicies
In Policy sollte Rule durch PolicyRule ersetzt werden. <SecurityPolicies> <Policy id="default" validate="false"> <PolicyRule type="MessageFlow" checkReplay="true" expires="60"/> <PolicyRule type="ClientCertAuth" errorFatal="true"/> <PolicyRule type="XMLSigning" errorFatal="true"/> <PolicyRule type="SimpleSigning" errorFatal="true"/> </Policy> </SecurityPolicies>
- MetadataProvider
<SignatureMetadataFilter certificate="dfn-aai.pem"/> ersetzen durch <MetadataFilter type="Signature" certificate="dfn-aai.pem"/>
Bei den DFN-AAI- und DFN-AAI-Test-Metadaten sollte außerdem
<MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
als weiterer MetadatenFilter hinzugefügt werden.
attribute-map.xml
Wenn AttributeDecoder vom Typ NameIDAttributDecoder oder NameIDFromScopedAttributeDecoder verwendet wird und der formatter den $NameQualifier (entityID des Identity Provider) verwendet, sollte die Option
defaultQualifiers="true"
hinzugefügt werden um sicherzustellen, dass $NameQualifier auch gesetzt ist, wenn der IdP keinen NameQualifier liefert (Default beim Shibboleth Identity Provider 2).
Upgrade SP2.2 -> SP2.3
shibboleth2.xml
- SessionInitiator
- defaultACSIndex sollte durch acsIndex ersetzt werden
<SessionInitiator type="Chaining" Location="/Login" isDefault="true" id="Intranet" relayState="cookie" entityID="https://blblogin.blb-karlsruhe.de/idp/shibboleth"> <SessionInitiator type="SAML2" acsIndex="1" acsByIndex="false" template="bindingTemplate.html"/> <SessionInitiator type="Shib1" acsIndex="5"/> </SessionInitiator>
- AttributeExtractor/AttributeFilter
Bei AttributeExtractor und AttributeFilter sollte wie in der mitgelieferten shibboleth2.xml die Option validate=„true“ gesetzt werden um attribute-map.xml und attribute-policy.xml zu validieren: XML
<AttributeExtractor type="XML" validate="true" path="attribute-map.xml"/> <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>
Upgrade SP2.2 -> SP2.3
shibboleth2.xml
Beim AttributeResolver ist die Option matchSubject hinzugekommen, mit der angegeben werden kann, ob der Service Provider bei SAML Attribut-Abfragen prüfen soll, ob sich die Antwort tatsächlich auf das Subject bezieht, für das angefragt wurde. Wir empfehlen, diese Option wie in der mitgelieferten shibboleth2.xml zu aktivieren:
<AttributeResolver type="Query" subjectMatch="true"/>
SP 2.5.1 installieren
Debian Pakete installieren
Webserver
aptitude install apache2
NTP
aptitude install ntp
OpenSSL
aptitude install openssl
Shibboleth build environment
aptitude install gcc g++ make libssl0.9.8 libssl-dev libcurl3 libcurl3-dev aptitude install libxerces-c3.1 libxerces-c-dev apache2-threaded-dev libboost-dev
Source Code download
Build Directory
export MYBUILD=/usr/local/src/shibboleth-sp2.5.1-build mkdir $MYBUILD
Download
cd $MYBUILD Webarchiv wget http://shibboleth.net/downloads/log4shib/1.0.5/log4shib-1.0.5.tar.gz Webarchiv wget http://shibboleth.net/downloads/c++-opensaml/2.5.1/xmltooling-1.5.2.tar.gz Webarchiv wget http://shibboleth.net/downloads/c++-opensaml/2.5.1/opensaml-2.5.1.tar.gz Webarchiv wget http://shibboleth.net/downloads/service-provider/2.5.1/shibboleth-sp-2.5.1.tar.gz Webarchiv wget http://mirror.switch.ch/mirror/apache/dist/santuario/c-library/xml-security-c-1.7.0.tar.gz
Entpacken der Sourcen
for f in $MYBUILD/*.tar.gz; do tar -xzvf $f -C $MYBUILD; done
Build
export SHIB_HOME=/opt/shibboleth-sp-2.5.1 mkdir $SHIB_HOME
Log4Shib
cd log4shib-1.0.5/ ./configure --prefix=$SHIB_HOME --disable-static --disable-doxygen make make install
XML-Security
cd ../xml-security-c-1.7.0/ ./configure --prefix=$SHIB_HOME make make install
XML-Tooling
cd ../xmltooling-1.5.2/ ./configure --prefix=$SHIB_HOME --with-log4shib=$SHIB_HOME --with-xmlsec=$SHIB_HOME -C make make install
OpenSAML
cd ../opensaml-2.5.1/ ./configure --prefix=$SHIB_HOME --with-log4shib=$SHIB_HOME -C make make install
Shibboleth Service Provider
cd ../shibboleth-sp-2.5.1/ ./configure --prefix=$SHIB_HOME --enable-apache-22 --with-log4shib=$SHIB_HOME --with-xmltooling=$SHIB_HOME --with-saml=$SHIB_HOME -C make make install
SP 2.5.2 installieren/upgrade
Debian Pakete installieren
Webserver
aptitude install apache2
NTP
aptitude install ntp
OpenSSL
aptitude install openssl
Shibboleth build environment
aptitude install gcc g++ make libssl0.9.8 libssl-dev libcurl3 libcurl3-dev aptitude install libxerces-c3.1 libxerces-c-dev apache2-threaded-dev libboost-dev
Source Code download
Build Directory
export MYBUILD=/usr/local/src/shibboleth-sp2.5.2-build mkdir $MYBUILD
Download
cd $MYBUILD Webarchiv wget http://shibboleth.net/downloads/log4shib/1.0.7/log4shib-1.0.7.tar.gz Webarchiv wget http://shibboleth.net/downloads/c++-opensaml/2.5.3/xmltooling-1.5.3.tar.gz Webarchiv wget http://shibboleth.net/downloads/c++-opensaml/2.5.3/opensaml-2.5.3.tar.gz Webarchiv wget http://shibboleth.net/downloads/service-provider/2.5.2/shibboleth-sp-2.5.2.tar.gz Webarchiv wget http://mirror.switch.ch/mirror/apache/dist/santuario/c-library/xml-security-c-1.7.2.tar.gz
Entpacken der Sourcen
for f in $MYBUILD/*.tar.gz; do tar -xzvf $f -C $MYBUILD; done
Build
export SHIB_HOME=/opt/shibboleth-sp-2.5.2 mkdir $SHIB_HOME
- Um den Ablauf zu beschleunigen hänge ich hinter den Configure noch gleich diesen Befehl:
&& echo "Configure: OK" && make && echo "Make: OK" && make install && echo "Make Install: OK"
Log4Shib
cd log4shib-1.0.7/ ./configure --prefix=$SHIB_HOME --disable-static --disable-doxygen make make install
XML-Security
cd ../xml-security-c-1.7.2/ ./configure --prefix=$SHIB_HOME make make install
XML-Tooling
cd ../xmltooling-1.5.3/ ./configure --prefix=$SHIB_HOME --with-log4shib=$SHIB_HOME --with-xmlsec=$SHIB_HOME -C make make install
OpenSAML
cd ../opensaml-2.5.3/ ./configure --prefix=$SHIB_HOME --with-log4shib=$SHIB_HOME -C make make install
Shibboleth Service Provider
cd ../shibboleth-sp-2.5.2/ ./configure --prefix=$SHIB_HOME --enable-apache-22 --with-log4shib=$SHIB_HOME --with-xmltooling=$SHIB_HOME --with-saml=$SHIB_HOME -C make make install
Konfiguration
- Bei einem Upgrade kann die Konfiguration übernommen werden
cp -a /opt/shibboleth-sp-2.5.x/etc/shibboleth /opt/shibboleth-sp-2.5.20/etc/shibboleth
- Bei einer Neuinstallation müssen folgen Sie dieser Anleitung
Ausgabe von Attributen (IDP)
targeted ID
- Eintrag in der attribute-resolver.xml
<resolver:DataConnector xsi:type="dc:ComputedId" id="computedID" generatedAttributeID="computedID" sourceAttributeID="uid" salt="01234567890123456789012345"> <resolver:Dependency ref="myLDAP" /> </resolver:DataConnector>
- Eintrage in der attribut-filter.xml
<AttributeRule attributeID="eduPersonTargetedID"> <PermitValueRule xsi:type="basic:ANY" /> </AttributeRule>
Ausgabe von Attributen begrenzen
Im Beispiel wird das Attribut eduPersonEntitlement für einen bestimmten SP eingeschränkt. Es werden nur die Attributsinhalte übermittelt, die im basic:AttributeValueString angegeben werden:
<afp:AttributeRule attributeID="eduPersonEntitlement"> <afp:PermitValueRule xsi:type="basic:OR"> <basic:Rule xsi:type="basic:AttributeValueString" value="urn:mace:dir:entitlement:common-lib-terms" ignoreCase="true"/> <basic:Rule xsi:type="basic:AttributeValueString" value="BEISPIELINHALT" ignoreCase="true"/> </afp:PermitValueRule> </afp:AttributeRule>
IDP Zertifikate erneuern
Anleitung auf der Seite des AAI-DFN
- Um ein Zertifikat zu erneuern, wird das nauee Zertifikat zusätzlich in die Metadaten eingefügt
- [https://www.aai.dfn.de/dokumentation/zertifikat-erneuern/ Anleitung AAI DFN}
- AAI DFN Doku - Zertifikat erneuern
As our federation policy is not allowing expired certificates to be used in production you need to renew you certificates before they expire. Please follow the intructions below: * Upload the new certificate via our online form at https://www.aai.dfn.de/verwaltung/ (by doing that do not remove the old certificate yet!) or send us an email (hotline@aai.dfn.de) with the new certificate attached, we will then upload the new certificate for you. * Check if your new certificate is included in the new federation metadata which is updated every hour and can be downloaded from https://www.aai.dfn.de/fileadmin/metadata/DFN-AAI-metadata.xml. * Wait a couple of days before switching to the new certificate on your local Shibboleth-System. That should give all other federation members the time to download the metadata with your new certificate. * As a last step remove the old certificate via our online form at https://www.aai.dfn.de/verwaltung/ after it has expired.
Anleitung für den Austausch in einer DFN-Föderation
- Das neue Zertifikat über die Metadaten-Verwaltung der DFN zusätzlich eintragen
- Jetzet einige Tage vergehen lassen, damit alle Mitglieder in der Föderation die neuen Metadaten synchronisiert haben.
- Falls der IDP zusätlich in einer lokalen Föderation eingebunden ist, muss vor den nächsten Schritten bei der lokalen Föderation noch Anpassungen vorgenommen werden. (siehe hier)
- Das neue Zertifikat im IDP einbinden. An diesen Stellen wird das Zertifikat verwendet:
- APACHE: /etc/apache2/ssl
- Shibboleth: /opt/shibboleth-idp/credentials/
- Das alte Zertifikat aus der Metadaten-Verwaltung der DFN löschen.
Anleitung für eine lokale Föderation
Für eine lokale Föderation gibt es eigene Metadaten. Diese müssen ebenso, wie die Metadaten in der Föderation des DFN angepasst werden. Leider hat man hier selten ein so schönes Webfrontend, so dass hier Handarbeit angesagt ist.
- Änderungen in den lokale Metadaten des IDP´s
- Im Bereich <KeyDescriptor>...InPqfPTIz306sEeu...</KeyDescriptor> steht das alte Zertifikat.
- Diesen Breich kopieren und direkt darunter wieder einfügen.
- Dann das Zertifikt im kopierten Bereich gegen das neue Zertifikt austauschen
- Diese Metadaten müssen dann auf alle SP´s verteilt werden. Normal richtet man die SP´s so ein, dass dieser sich die Metadaten selbst in bestimmten Zeitabschnitten holen.
- Das kann beschleunigt werden, in dem man die Metadaten auf dem SP löscht und den shibd neu startet. Dadurch werden die Metadaten vom IDP neu geholt.
- Vor dem Austausch des IDP-Zertifikates muss sichergestellt sein:
- dass die Metadaten der DFN, wie auch die Metadaten der lokalen Föderation, beide Zertifikate (alt und neu) enthalten,
- und dass die Metadaten der SP´s, in der DFN-Föderation und der lokalen Föderation den, synchronisiert sind.
- Das neue Zertifikat im IDP einbinden. An diesen Stellen wird das Zertifikat verwendet:
- APACHE: /etc/apache2/ssl
- Shibboleth: /opt/shibboleth-idp/credentials/
- Jetzt kann das alte Zertifikat aus den Metadaten der lokalen Föderation gelöscht werden.
- Dazu löscht man das alte Zertifikat <KeyDescriptor>...ALTES ZERTIFIKAT...</KeyDescriptor>
- Die geänderten Metadaten werden wieder von den SP´s synchrinisiert.
- Wenn der IDP auch in der DFN-Föderation teilnimmt, kann nun auch dort das alte Zertifikat gelöscht werden
IDP Status und Metadaten
- Metadaten
https://[IDP_URL]/idp/profile/Metadata/SAML
- Status
https://[IDP_URL]/idp/status
SP Status und Metadaten
https://sp.example.org/Shibboleth.sso/Session https://sp.example.org/Shibboleth.sso/Status https://sp.example.org/Shibboleth.sso/Metadata https://sp.example.org/Shibboleth.sso/Login
Single Logout
Metadaten
https://<HOST>/Shibboleth.sso/SLO/SOAP https://<HOST>/Shibboleth.sso/SLO/Redirect https://<HOST>/Shibboleth.sso/SLO/POST https://<HOST>/Shibboleth.sso/SLO/Artifact
Logout Links
<a href="https://<IDP-URL>/idp/profile/Logout" >IDP Logout<a/> <a href="https://<SP-URL>/Shibboleth.sso/Logout"> SP Logout </a>