Dies ist eine alte Version des Dokuments!


Installation Shibboleth IdP 4.x

Laden Sie den Shibboleth IdP herunter, prüfen Sie die Signatur und entpacken Sie das Archiv. Die aktuelle IdP-Version findet sich stets unter http://shibboleth.net/downloads/identity-provider/latest/.

root@idp:~# mkdir /opt/install
root@idp:~# cd /opt/install
root@idp:/opt/install# wget https://shibboleth.net/downloads/identity-provider/latest/shibboleth-identity-provider-4.0.0.tar.gz
root@idp:/opt/install# wget https://shibboleth.net/downloads/identity-provider/latest/shibboleth-identity-provider-4.0.0.tar.gz.asc
root@idp:/opt/install# wget https://shibboleth.net/downloads/PGP_KEYS
root@idp:/opt/install# gpg --import PGP_KEYS
root@idp:/opt/install# gpg --verify shibboleth-identity-provider-4.0.0.tar.gz.asc shibboleth-identity-provider-4.0.0.tar.gz
root@idp:/opt/install# tar -xzf shibboleth-identity-provider-4.0.0.tar.gz
root@idp:~# cd /opt/install/shibboleth-identity-provider-4.0.0

Das Installationsskript findet sich unter bin/install.sh. Beim Ausführen werden die wichtigsten Angaben zum IdP abgefragt, wie der FQDN und das Zielverzeichnis, in das der IdP installiert werden soll. Der Default hierfür ist /opt/shibboleth-idp.

root@idp:/opt/install/shibboleth-identity-provider-4.0.0# JAVA_HOME=/usr bin/install.sh 
Buildfile: /opt/install/shibboleth-identity-provider-4.0.0/bin/build.xml
 
install:
Source (Distribution) Directory (press <enter> to accept default): [/opt/install/shibboleth-identity-provider-4.0.0] ? 
 
Installation Directory: [/opt/shibboleth-idp] ? 
 
INFO [net.shibboleth.idp.installer.V4Install:151] - New Install.  Version: 4.0.0
Host Name: [192.168.0.5] ? 
idp-dev.hochschule-XY.de
INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-signing, CN = idp-dev.hochschule-XY.de URI = https://idp-dev.hochschule-XY.de/idp/shibboleth, keySize=3072
INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-encryption, CN = idp-dev.hochschule-XY.de URI = https://idp-dev.hochschule-XY.de/idp/shibboleth, keySize=3072
Backchannel PKCS12 Password:
Re-enter password: 
INFO [net.shibboleth.idp.installer.V4Install:592] - Creating backchannel keystore, CN = idp-dev.hochschule-XY.de URI = https://idp-dev.hochschule-XY.de/idp/shibboleth, keySize=3072
Cookie Encryption Key Password:
Re-enter password: 
INFO [net.shibboleth.idp.installer.V4Install:633] - Creating backchannel keystore, CN = idp-dev.hochschule-XY.de URI = https://idp-dev.hochschule-XY.de/idp/shibboleth, keySize=3072
INFO [net.shibboleth.utilities.java.support.security.BasicKeystoreKeyStrategyTool:166] - No existing versioning property, initializing...
SAML EntityID: [https://idp-dev.hochschule-XY.de/idp/shibboleth] ? 
 
Attribute Scope: [hochschule-XY.de] ? 
 
INFO [net.shibboleth.idp.installer.V4Install:433] - Creating Metadata to /opt/shibboleth-idp/metadata/idp-metadata.xml
INFO [net.shibboleth.idp.installer.BuildWar:71] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.0.0
INFO [net.shibboleth.idp.installer.BuildWar:80] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp
INFO [net.shibboleth.idp.installer.BuildWar:89] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp
INFO [net.shibboleth.idp.installer.BuildWar:94] - Creating war file /opt/shibboleth-idp/war/idp.war
 
BUILD SUCCESSFUL
Total time: 52 seconds

Die beiden abgefragten Passwörter werden in die IdP-Config geschrieben, müssen also nicht notiert oder gemerkt werden. Wählen Sie daher möglichst starke Passwörter. Der IdP wird dann im angegebenen Zielverzeichnis installiert.

Nachdem die IdP-Files installiert sind, versucht der Tomcat, das Servlet automatisch zu starten (siehe Tomcat-Log). Das scheitert üblicherweise aber erstmal da einige Dateien für den Tomcat-User nicht lesbar abgelegt wurden. Korrigieren Sie dies mit:

root@idp:/opt/install/shibboleth-identity-provider-4.0.0# cd /opt/shibboleth-idp
root@idp:/opt/shibboleth-idp# chgrp -R $( getent group | grep ^tomcat | cut -d ":" -f1 ) conf credentials
root@idp:/opt/shibboleth-idp# chmod -R g+r conf credentials

Außerdem müssen Log-Verzeichnis und Metadata-Verzeichnis für den Tomcat-User schreibbar gemacht werden:

root@idp:/opt/shibboleth-idp# chown $( getent passwd | grep ^tomcat | cut -d ":" -f1 ):$( getent group | grep ^tomcat | cut -d ":" -f1 ) logs metadata

Zur Darstellung der Status-Seite muss

  • die Java Standard Tag Library (JSTL) im Tomcat bereit stehen (siehe Vorarbeiten).
  • die IdP Status URL für Ihr eigenes Netz und das Monitoring-Netz des DFN freigegeben werden. Damit das DFN-AAI-Monitoring nur auf die Status-Seite zugreifen kann, erstellen Sie eine separates <entry> Element mit der id StatusAccessByIPAddress:
/opt/shibboleth-idp/conf/access-control.xml
<beans ...>
   <!-- ... -->
    <util:map id="shibboleth.AccessControlPolicies">
        <entry key="AccessByIPAddress">
            <bean parent="shibboleth.IPRangeAccessControl"
                p:allowedRanges="#{ {'127.0.0.1/32', '::1/128', 'IHR-NETZ/IHRE-NETZMASKE'} }" />
        </entry>
        <entry key="StatusAccessByIPAddress">
            <bean parent="shibboleth.IPRangeAccessControl"
                p:allowedRanges="#{ {'127.0.0.1/32', '::1/128', 'IHR-NETZ/IHRE-NETZMASKE', '193.174.247.0/24', '2001:638:206:1::/64'} }" />
        </entry>
    </util:map>
   <!-- ... -->
</beans>

Dieser Eintrag muss dann noch in idp.properties der Status-Seite zugewiesen werden:

./conf/idp.properties
idp.status.accessPolicy=StatusAccessByIPAddress

Jetzt kann Tomcat neu gestartet werden:

root@idp:/opt/shibboleth-idp# systemctl restart tomcat9

Dabei lassen Sie am besten in drei Terminalfenstern den Tomcat- und die beiden relevanten IdP-Logs mitlaufen:

root@idp:/opt/shibboleth-idp# tail -f /var/log/tomcat9/catalina.out
root@idp:/opt/shibboleth-idp# tail -f logs/idp-process.log
root@idp:/opt/shibboleth-idp# tail -f logs/idp-warn.log

Finden sich dort keine Fehler, ist der IdP erfolgreich gestartet. Überprüfen Sie als erstes, ob Sie die Status-Seite sehen können:

https://idp.hochschule-XY.de/idp/status

Um den Aufwand beim Eintragen der IdP-Metadaten in der DFN-AAI Metadatenverwaltung zu reduzieren, empfiehlt es sich vor dem initialen Registrieren des IdPs in ./metadata/idp-metadata.xml die noch fehlenden Einträge zu aktivieren. Es handelt sich dabei um IdP-Features die in der DFN-AAI empfohlen sind und deren Konfiguration in diesem Wiki zu finden sind. Im Folgenden sind nur die relevanten Abschnitte angegben (mit „…“ ist gemeint dass hier Zeilen und Abschnitte vorhanden sind, diese aber der Übersichtlichkeit halber hier nicht aufgeführt sind). Details zum Speichern und Einbindung der Logos Ihrer Einrichtung finden Sie hier.

./metadata/idp-metadata.xml
...
 
    <!-- Beschreibung und Logo aktivieren -->
        <Extensions>
            <shibmd:Scope regexp="false">hochschule-XY.de</shibmd:Scope>
            <mdui:UIInfo>
                <mdui:DisplayName xml:lang="en">XY University (Development)</mdui:DisplayName>
                <mdui:DisplayName xml:lang="de">Hochschule XY (Development)</mdui:DisplayName>
                <mdui:Description xml:lang="en">Identity Provider of XY University</mdui:Description>
                <mdui:Description xml:lang="de">Identity Provider der Hochschule XY</mdui:Description>
                <mdui:Logo height="16" width="16">https://idp-dev.hochschule-XY.de/favicon.ico</mdui:Logo>
                <mdui:Logo height="80" width="80">https://idp-dev.hochschule-XY.de/idp/images/logo.png</mdui:Logo>
            </mdui:UIInfo>
        </Extensions>
 
        ...
 
        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="..."/>
 
        <!-- vier Single-Logout-Services aktiveren -->
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="..."/>
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="..."/>
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="..."/>
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="..."/>
 
        <SingleSignOnService Binding="urn:mace:...
        <SingleSignOnService Binding="urn:oasis:...
        <SingleSignOnService Binding="urn:oasis:...
        <SingleSignOnService Binding="urn:oasis:...
        <!-- den fehlenden ECP-Endpoint hinzufügen -->
        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.hochschule-XY.de/idp/profile/SAML2/SOAP/ECP"/>
 
        <!-- die fehlenden NameID-Formate hinzufügen -->
        <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
...
    </IDPSSODescriptor>
 
    <!-- Protocol-Support für SAML2-Queries im AA-Descriptor aktivieren -->
    <AttributeAuthorityDescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
 
        ...
 
        <AttributeService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="..."/>
        <!-- SAML2-Attribute-Service aktivieren -->
        <AttributeService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="..."/>
 
        <!-- die fehlenden NameID-Formate hinzufügen -->
        <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
 
    </AttributeAuthorityDescriptor>
 
</EntityDescriptor>

Weiter geht es mit der Konfiguration.

  • Zuletzt geändert: vor 4 Jahren