cs:tech:sp:shibb-2.4

Konfigurace Shibboleth SP 2.5.x

Předpoklady:

  • nainstalovaný a funkční Apache 2.2.x s podporou SSL, konfigurační soubory v adresáři /etc/apache2
  • nainstalovaný Shibboleth SP 2.5.x, konfigurační soubory v adresáři /etc/shibboleth

Konfigurace Shibboleth

Hlavní konfigurace je umístěna v souboru shibboleth2.xml.

shibboleth2.xml

Konfigurační soubor byl od verze 2.4 značně zjednodušen a ve své základní formě by měl být postačující pro většinu implementací. Byla zachována zpětná kompatibilita, takže v nových verzích Shibboleth SP by měly fungovat i starší konfigurační soubory bez problémů.

Nové pojetí konfiguračního souboru ve výchozí formě vypustilo element RequestMapper, který mapoval příchozí dotazy na aplikace definované v rámci konfiguračního souboru. V naprosté většině jde o jednu výchozí aplikaci, kterou lze nastavit v konfiguraci Apache.

ApplicationDefaults

Defaultní nastavení aplikace je definováné v elementu ApplicationDefaults (atribut id=„default“ odpovída atributu applicationId v nastaveni elementu RequestMapper).

    <ApplicationDefaults entityID="ENTITY_ID"
                         REMOTE_USER="eppn persistent-id targeted-id">

Kde:

  • ENTITY_ID - identifikátor SP v rámci federace (pod kterým je veden v metadatech)

Podrobné informace o nastavení najdete v oficiální dokumentaci.

Sessions

V elementu Sessions lze nastavit různé parametry týkající se sezení (sessions) v Shibbolethu. Je doporučitelné nastavit atributy handlerSSL a cookieProps dle příkladu:

<Sessions lifetime="28800" timeout="3600" checkAddress="false" relayState="ss:mem" 
    handlerSSL="true" cookieProps="https">

Od verze 2.4 je možné místo komplikované definice elementu SessionInitiator použít zjednodušeny element SSO. Tento element agreguje v sobě nastavení komplexního SessionInitiator elementu s location atributem s hodnotou „/Login“. Pokud jsou potřeba další SessionInitiator elementy, musí se umístit na konci nadřazeného Sessions elementu.

Použití zjednodušeného SSO elementu:

<SSO discoveryProtocol="SAMLDS" discoveryURL="DS_URL">
    SAML2 SAML1
</SSO>

Použití klasického SessionInitiator elementu:

<SessionInitiator type="Chaining" Location="/DS" isDefault="false" id="DS">
    <SessionInitiator type="SAML2" template="bindingTemplate.html"/>
    <SessionInitiator type="Shib1"/>
    <SessionInitiator type="SAMLDS" URL="DS_URL"/>
</SessionInitiator>

Kde:

V případě potřeby pokročilých nastavení, použíjte originální dokumentaci elementu Sessions.

MetadataProvider

V elementu MetadataProvider se definuje způsob získávání federačních metadat. Víc informací najdete v sekci o metadatech.

CredentialResolver

V elementu CredentialResolver definujeme cesty ke klíči a certifikátu, které SP používá při podepisování své komunikace:

<CredentialResolver type="File" 
    key="/etc/ssl/private/www.example.cz.key.pem" 
    certificate="/etc/ssl/certs/www.example.cz.crt.pem" />

Atributy

V souboru attribute-map.xml definujeme mapování příchozích atributů na lokální proměnné. Ve výchozi verzi konfiguračního souboru najdeme zakomentované definice běžných atribitů, stačí pouze odkomentovat ty potřebné. Víc informací v oficiální dokumentaci.

Příchozí atributy lze dodatečně kontrolovat a zpracovávat nastavením ruzných pravidel a filtrů v souboru attribute-policy.xml.

Startovací skript

V distribuci jsou přibaleny startovací skripty pro Debian (shibd-debian) a Red Hat (shibd-redhat). Pokud žádný z nich nevyhovuje, mužou alespoň posloužit jako inspiraci při psaní vlastního skriptu.

Konfigurace 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, která zajistí natažení příslušného modulu:

LoadModule mod_shib /usr/lib/shibboleth/mod_shib_22.so

Dále je potřeba definovat adresář který chceme zabezpečit:

<Location /secure/>
    AuthType shibboleth
    ShibRequireSession On
    require valid-user
</Location>

V jednodušších případech bohatě stačí konfigurace na úrovni Apache. Plný seznam možných direktiv najdete v oficiální konfiguraci.

Existují různé způsoby, jak řídit přístup k adresářům - na úrovní Apache, na úrovni Shibbolethu nebo na úrovni samotné aplikace. Víc informací najdete v oficiální dokumentaci.

Pokročilá nastavení

Lazy sessions

Požadovat autentizaci po všech uživatelích je vhodné například u intranetu, ale u veřejných webserverů je častější případ, kdy si uživatelé mohou stránky anonymně prohlížet, a přihlásit se až v okamžiku, kdy potřebují provést změny nebo získat přístup k privátním informacím. 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. K tomu je potřeba vypnout požadavek na vytvoření session (ShibRequireSession Off):

  <Location /app/>
    AuthType shibboleth
    ShibRequireSession Off
    require shibboleth
  </Location>

Při tomto nastavení je uživatel vpuštěn na stránku bez nutnosti autentizace. Pokud je potřeba uživatele přihlásit, lze vytvořit „Login“ odkaz s URL:

https://sp.example.cz/Shibboleth.sso/Login?target=https://sp.example.cz/app/privatni/

Po kliknutí na odkaz se spustí Login session initiator (definovaný zkráceně v elementu SSO anebo v zvláštním SessionInitiator elementu). Po úspěšné autentizaci je uživatel přesměrován na URL obsažene v target parametru.

Lze nastavit i další parametry, viz oficiální dokumentace.

Virtuální webservery

Virtuální webservery je možné použít dvěma různými způsoby:

  • více samostatných SP na jedné instalaci Apache
  • jeden sdílený SP pro více DNS jmen
Více samostatných SP na jedné instalaci Apache

Je možné provozovat více SP na jednom fyzickém stroji. Každý SP má vlastní certifikát a vlastní metadata. K provozu stačí jedna instance Shibboleth SP. Pro nastavení prvního SP využijeme standardně element ApplicationDefaults. Pro každý další SP musíme na konci ApplicationDefaults přidat zvlaštní ApplicationOverride. V elementech ApplicationOverride neni potřeba definovat všechny elementy z ApplicationDefaults, ale pouze elementy, které se liší. Elementy ApplicationOverride musí mít nastaven atribut id, u elementu ApplicationDefaults je hodnota atributu nastavena na default. Pomocí těchto hodnot pak v Apachi nastavíme přístup k jednotlivým aplikacím:

  <Location /app1/>
    AuthType shibboleth
    ShibRequireSession On
    ShibRequestSetting applicationId default
    require valid-user
  </Location>

  <Location /app2/>
    AuthType shibboleth
    ShibRequireSession On
    ShibRequestSetting applicationId app2
    require shibboleth
  </Location>

Oficiální dokumentace:

Jeden SP sdílený pro více DNS jmen

Pokud máte pro stejné stránky zaregistrováno více DNS jmen, např. www.moje.cz, moje.cz, moje.cesnet.cz, ale na všech chcete použít stejný SP, pak v konfiguraci Apache vytvořte virtuální webserver s příslušnými aliasy, tj.:

<VirtualHost 147.251.9.183:443>
    ServerName www.moje.cz
    ServerAlias moje.cz
    ServerAlias moje.cesnet.cz

a do metadat federace je třeba zaregistrovat jen jeden SP, ale ten musí mít pro každé DNS jméno definovaný tag AssertionConsumerService. Nejjednodušší jak taková metadata vyrobit je využít šablony metadat. Tedy do shibboleth2.xml přidejte:

<!-- Extension service that generates "approximate" metadata based on SP configuration. -->
<Handler type="MetadataGenerator" Location="/Metadata" signing="false" template="/etc/shibboleth/sablona_moje.xml"/>

a do souboru sablona_moje.xml přidejte to, co chcete přidat do metadat, tedy určitou variaci na:

<?xml version="1.0" encoding="utf-8" ?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
  <md:SPSSODescriptor>
    <!-- pridani endpointu pro alternativni DNS jmena -->
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://moje.cz/Shibboleth.sso/SAML2/POST" index="1"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://moje.cesnet.cz/Shibboleth.sso/SAML2/POST" index="2"/>
  </md:SPSSODescriptor>
 
  <md:Organization>
    <md:OrganizationName xml:lang="en">My organization</md:OrganizationName>
    <md:OrganizationName xml:lang="cs">Moje organizace</md:OrganizationName>
    <md:OrganizationDisplayName xml:lang="en">My organization</md:OrganizationDisplayName>
    <md:OrganizationDisplayName xml:lang="cs">Moje organizace</md:OrganizationDisplayName>
    <md:OrganizationURL xml:lang="en">http://www.moje.cz/en</md:OrganizationURL>
    <md:OrganizationURL xml:lang="cs">http://www.moje.cz/</md:OrganizationURL>
  </md:Organization>
  <md:ContactPerson contactType="technical">
    <md:GivenName></md:GivenName>
    <md:SurName>První</md:SurName>
    <md:EmailAddress>mailto:ja@moje.cz</md:EmailAddress>
  </md:ContactPerson>
</md:EntityDescriptor>

a nechte si metadata vygenerovat přístupem na https://www.moje.cz/Shibboleth.sso/Metadata .To DNS jméno v URL generujícím metadata je důležité, protože automaticky bude do metadat vygenerována AssertionConsumerService pro toto DNS jméno. Ostatní DNS jména je třeba přidat přes šablonu.

Závěr a testování

Po ukončení konfigurace je potřeba restartovat Apache a nastartovat Shibboleth daemon. Instalaci otestujte přístupem na adresu

https://HOSTNAME/Shibboleth.sso/Status

a pokud je vše v pořádku, mělo by se zobrazit „ok“. V opačném případě je možné, že SP sice funguje správně, ale v konfiguraci existuje omezení na IP adresu, z které je možné se dotázat, viz oficiální dokumentace.

Zkuste zadat do prohlížeče „chráněnou“ adresu:

https://HOSTNAME/secure

V případě, že máte vše v pořádku budete přesměrováni k WAYF/DS stránce, kde můžete vybrat svou domovskou organizaci a dokončit přihlašení. Po přihlášení budete vpuštěni do chráněné oblasti. Nezapoměňte do adresáře /secure vložit nějaký soubor, nejlépe index.html s nějakým textem anebo pokud web server podporuje PHP - index.php s obsahem:

<?php
phpinfo();
?>

Pokud chcete zjistit další informace, použijte handler Session:

https://HOSTNAME/Shibboleth.sso/Session

Zobrazuje informace o aktuální session. Je možné zobrazit i hodnoty atributu, ale k tomu je potřeba v shibboleth2.xml nastavit atribut showAttributeValues u příslušnýho Handler elementu:

<!-- Session diagnostic service. -->
<Handler type="Session" Location="/Session" showAttributeValues="true" />

:!: U obou handlerů - status a session - je možné omezit přístup přes seznam IP adres, víc informací najdete v oficiální dokumentaci.

Poslední úprava: 2017/02/10 07:02