(Dokud nebude návod kompletní, inspirujte se návodem pro migraci konfigurace po upgrade ze stránky Upgrade SP z 1.3.1 na 2.0 )
Předpokládejme, že následující věci jsou splněny:
/etc/apache2/ssl/klic.pem a /etc/apache2/ssl/cert.pem.
Pak v adresáři /etc/shibboleth jsou konfigurační soubory pro SP, zejména hlavní konfigurační soubor shibboleth2.xml, a někde, např. v adresáři /etc/apache2 jsou konfigurační soubory Apache.
Apache musí načíst modul pro Shibboleth. Pokud jste instalovali z RPM, v adresáři /etc/apache2/conf.d by měl být soubor shib.conf. Pokud tam není, zkopírujte soubor /etc/shibboleth/apache22.config na jeho místo, nebo jinak zajistěte, že Apache bude číst direktivy v něm umístěné. V podstatě nejdůležitější je v něm direktiva vypadající nějak takto
LoadModule mod_shib /usr/lib64/shibboleth/mod_shib_22.so
která zajistí natažení modulu pro Shibboleth.
Soubor obsahuje i ukázku jak nastavit ochranu Shibbolethem pro všechna URL začínající na /secure:
<Location /secure> AuthType shibboleth ShibRequireSession On require valid-user </Location>
Pro vyzkoušení to stačí, podrobnosti viz Použití SP z hlediska vývojáře.
Modul v Apache potřebuje komunikovat s démonem shibd, který je v /usr/sbin/shibd. Vytvořte proto pro něj startovací dávku, můžete využít dávky v /etc/shibboleth pro Debian, RedHat a OS-X. V podstatě stačí při startu Apache spustit příkaz
/usr/sbin/shibd -fc /etc/shibboleth.shibboleth2.xml
Ale ještě ho nespouštějte, je třeba nakonfigurovat shibd.
Pro konfiguraci potřěbujete znát následující věci:
entityID pro svého SP, nějaké si vymyslete, třeba https://www.moje.cz/shibboleth/cztestfed/sphttp://www.moje.cz/etc/apache2/ssl/cert.pem a /etc/apache2/ssl/key.pem
Otevřete ve svém oblíbeném editoru soubor /etc/shibboleth/shibboleth2.xml a udělejte následující změny.
V tagu <ApplicationDefaults> nastavte atributy entityID a homeURL na hodnoty výše zmíněné hodnoty:
<ApplicationDefaults id="default" policyId="default"
entityID="https://www.moje.cz/shibboleth/cztestfed/sp"
homeURL="http://www.moje.cz/"
V části RequestMapper nastavte jméno webserveru. Položky <Path> není nutné uvádět, stejnou konfiguraci můžete provést v konfiguraci Apache pomocí direktiv.
<RequestMapper type="Native">
<RequestMap applicationId="default">
<Host name="www.moje.cz" >
<Path name="secure" authType="shibboleth" requireSession="true"/>
</Host>
</RequestMap>
</RequestMapper>
Nastavte zdroj metadat. Shibboleth 2.0 podporuje jejich stahování z URL a ukládání do lokálního souboru. Interval je v sekundách. Uvedené nastavení nekontroluje XML-podpisy v metadatech, ale v tomto okamžiku v metadatech stejně žádné nejsou. Více viz dokumentace Shibboleth 2.0.
<MetadataProvider type="XML" uri="http://www.eduid.cz/docs/cztestfed/metadata/cztestfed-metadata.xml"
backingFilePath="/etc/shibboleth/cztestfed-metadata.xml" reloadInterval="7200">
</MetadataProvider>
Případné další elementy MetadataProvider, které nepoužíváte, raději zakomentujte.
Nastavte cestu ke klíči a certifikátu:
<CredentialResolver type="File" key="/etc/apache2/ssl/key.pem" certificate="/etc/apache2/ssl/cert.pem"/>
A ještě je potřeba upravit část konfigurující vyvolání autentizace. Je potřeba
<SessionInitiator> protože jinak se bud používat ontakže konfigurace bude vypadat nějak takto:
<!--
<SessionInitiator type="Chaining" Location="/Login" isDefault="true" id="Intranet"
relayState="cookie" entityID="https://idp.example.org/shibboleth">
<SessionInitiator type="SAML2" defaultACSIndex="1" template="bindingTemplate.html"/>
<SessionInitiator type="Shib1" defaultACSIndex="5"/>
</SessionInitiator>
-->
<SessionInitiator type="Chaining" Location="/WAYF" id="WAYF" relayState="cookie">
<SessionInitiator type="SAML2" defaultACSIndex="1" template="bindingTemplate.html"/>
<SessionInitiator type="Shib1" defaultACSIndex="5"/>
<SessionInitiator type="WAYF" defaultACSIndex="5" URL="https://www.eduid.cz/cztestfed/wayf/"/>
</SessionInitiator>
Toto je nastavení pro required sessions, tedy pokud na stránky mohou jen autentizovaní uživatelé. Když prohlížeč požádá o stránku, pro kterou je v konfiguraci Apache nastaveno
AuthType shibboleth ShibRequireSession On
prohlížeč bude přesměrován na URL WAYF serveru a v cookie se zapamatuje, kam se má po autentizaci vrátit.
V tomto okamžiku máte základní konfiguraci hotovou. Spusťte Apache a shibd, a navštivte URL
https://www.moje.cz/Shibboleth.sso/Metadata. Výsledný soubor pošlete správci federace, aby ho zařadil do metadat federace. Až tak učiní, počkejte pár hodin, než se změna projeví u IdP, a můžete navštívit URL
https://www.moje.cz/secure pro vyzkoušení funčnosti.
Následují pokročilá nastavení.
Vyžadování autentizace po všech uživatelích je vhodné například u intranetu, ale u veřejných webserverů je častější případ, že uživatelé si mohou stránky anonymně prohlížet, a přihlásit se až v okamžiku, kdy chtějí nějaká data zapsat. To také umožňuje, aby prohledávací roboti vyhledávacích serverů (Google, Seznam atd.) mohli stránky navštívit a indexovat.
Pro tento případ Shibboleth podporuje tzv. lazy sessions. Uživatelé mohou na stránky anonymně a aktivují autentizaci v případě potřeby kliknutím na speciální odkaz.
V konfiguraci je potřeba doplnit další SessionInitiator
<SessionInitiator type="WAYF" Location="/WAYF/czTestFed" id="WAYFcz"
relayState="cookie" URL="https://www.eduid.cz/cztestfed/wayf/" defaultACSIndex="5">
</SessionInitiator>
kde atributem Location volíme ten speciální odkaz, atributem URL volíme kam má být prohlížeč přesměrován (adresa WAYF serveru) a atribut defaultACSIndex=„5“ odkazuje na tag <AssertionConsumerService> níže, který určuje jakým způsobem má IdP předat informace na SP.
Při této konfiguraci bude autentizace vyvolána návštěvou URL https://www.moje.cz/Shibboleth.sso/WAYF/czTestFed.
Stále ale platí, že pokud aplikace sídlí na adrese https://www.moje.cz/aplikace/, musíte v konfiguraci Apache nastavit:
<Location /aplikace/> AuthType shibboleth require shibboleth </Location>
Po autentizaci je uživatel přesměrován na výchozí URL pro danou aplikaci. Pokud chcete, aby byl uživatel přesměrován jinám, lze toto chování změnit pomocí GET parametru target u odkazu na SessionInitiator URL, například:
https://www.moje.cz/Shibboleth.sso/WAYF/czTestFed?target=https://www.moje.cz/aplikace/admin
Lze nastavit i další parametry, viz oficiální dokumentace.
Pro intranetové aplikace je zbytečné obtěžovat uživatele cestou přes WAYF, můžeme je poslat přímo na příslušný IdP. Toho dosáhneme tak, že v konfiguraci Apache uvedeme
AuthType shibboleth
ShibRequireSessionWith mujIdP
a v shibboleth2.xml vytvoříme další SessionInitiator s odpovídajícím identifikátorem:
<SessionInitiator id="mujIdP" Location="/WAYF/moje" type="Shib1" defaultACSIndex="5" relayState="cookie" URL="https://idp.moje.cz/shibboleth-idp/SSO" entityID="urn:mace:cesnet.cz:cztestfed:idp.moje.cz" />
kde atribut id musí odpovídat identifikátoru z direktivy ShibRequireSessionWith, atributem Location volíme speciální odkaz pro aktivaci pokud používáme lazy sessions, atributem URL volíme přímé přesměrování na vybraného IdP a v atributu entityID musí být příslušné entityID uvedé pro IdP v metadatech federace.
Pokud potřebujete mít na jednom Apache více virtuálních webserverů a na nich používat Shibboleth, zaregistrujte každý zvlášt do federace, tj. mějte pro něj samostatný certifikát a přidejte ho do metadat federace.
V souboru shibboleth2.xml pak vytvořte další aplikaci. Nejdřív v RequestMap přidejte další server, např.:
<RequestMap applicationId="default">
<Host name="www.moje.cz">
</Host>
<Host name="www.druhy.cz" applicationId="druhy">
</Host>
</RequestMap>
a pak na konci tagu ApplicationDefaults vytvořte druhou aplikaci definováním rozdílů oproti první:
<ApplicationOverride id="druhy" entityID="https://www.druhy.cz/shibboleth/cztestfed/sp" homeURL="http://www.druhy.cz/">
<CredentialResolver type="File" key="/etc/apache2/ssl/druhykey.pem" certificate="/etc/apache2/ssl/druhycert.pem"/>
</ApplicationOverride>