====== Shibboleth IdP ======
**Na této stránce se nachází návod, jak do linuxové distribuce Debian nainstalovat Shibboleth IdP. Před instalací musíme zprovoznit [[jetty]].**
**Konec podpory pro Shibboleth IdP řady 4 je k 1. 9. 2024. Tento návod se tedy týká již nové řady 5.**
V případě potíží nebo nejasností se neváhejte obrátit na [[info@eduid.cz]].
----
===== Instalace =====
Zdrojové kódy stáhneme ručně [[https://shibboleth.net/downloads/identity-provider/5.0.0/|ze stránky projektu]] a nahrajeme na server do adresáře ''/opt'' anebo použijeme program //wget// následujícím způsobem. __Následně nezapomeneme ověřit SHA256 otisk a GPG podpis!__
# Stažení zdrojového kódu Shibboleth IdP
wget -P /opt \
https://shibboleth.net/downloads/identity-provider/5.0.0/shibboleth-identity-provider-5.0.0.tar.gz \
https://shibboleth.net/downloads/identity-provider/5.0.0/shibboleth-identity-provider-5.0.0.tar.gz.asc \
https://shibboleth.net/downloads/identity-provider/5.0.0/shibboleth-identity-provider-5.0.0.tar.gz.sha256
# Přepnutí do adresáře /opt
cd /opt
# Kontrola SHA256 otisku
sha256sum -c shibboleth-identity-provider-5.0.0.tar.gz.sha256
# Kontrola GPG podpisu
gpg --verify shibboleth-identity-provider-5.0.0.tar.gz.asc
Nyní přistoupíme k samotné instalaci.
# Instalace Shibboleth IdP
tar -xzf shibboleth-identity-provider-5.0.0.tar.gz
cd shibboleth-identity-provider-5.0.0/
./bin/install.sh
Po spuštění instalačního skriptu:
- potvrdíme zdrojový instalační adresář,
- potvrdíme cílový instalační adresář,
- vyplníme hostname serveru (pokud není vyplněn správně),
- potvrdíme entityID,
- zadáme scope organizace (pokud není vyplněn správně).
Zde je vyobrazen průběh instalačního skriptu ''install.sh''.
Installation Directory: [/opt/shibboleth-idp] ?
INFO - New Install. Version: 5.0.0
Host Name: [idp.example.org] ?
INFO - Creating idp-signing, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072
INFO - Creating idp-encryption, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072
INFO - Creating backchannel keystore, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072
INFO - Creating Sealer KeyStore
INFO - No existing versioning property, initializing...
SAML EntityID: [https://idp.example.org/idp/shibboleth] ?
Attribute Scope: [example.org] ?
INFO - Initializing OpenSAML using the Java Services API
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2001/04/xmlenc#ripemd160
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2001/04/xmldsig-more#hmac-ripemd160
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha1-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha224-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha256-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha384-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha3-224-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha3-256-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha3-384-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha3-512-rsa-MGF1
INFO - Algorithm failed runtime support check, will not be usable: http://www.w3.org/2007/05/xmldsig-more#sha512-rsa-MGF1
INFO - Creating Metadata to /opt/shibboleth-idp/metadata/idp-metadata.xml
INFO - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 5.0.0
INFO - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp
INFO - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp
INFO - Creating war file /opt/shibboleth-idp/war/idp.war
Tím je instalace hotová a přesuneme se ke konfiguraci.
===== Konfigurace =====
Konfigurace může být dost různorodá a vše závisí na tom, zda-li chceme IdP používat pouze pro přístup ke službám federace anebo ho chceme používat i pro přístup k našim interním službám.
**Konfigurace uvedená v tomto návodu slouží jako naprostý základ, na kterém lze do budoucna stavět. Není možné sepsat specifičtější návod, protože Shibboleth IdP je velmi komplexní software s nepředstavitelnou škálou možností.**
==== idp.properties ====
V souboru ''/opt/shibboleth-idp/conf/idp.properties'' nastavíme podporu pro tzv. //consent// (dříve //uApprove//), což je ukládání souhlasů s vydáváním uživatelských informací (atributů) do databáze. Dále zde máme možnost ovlivnit, zda se budou používat cookies anebo lokální úložiště HTML ("HTML Local Storage"). A v neposlední řadě zde můžeme ovlivnit výchozí šifrovací algoritmus pro šifrování XML.
IdP řady 2 uměla využívat pouze cookies. IdP řady 3 přinesla možnost používání lokálního úložiště, ale tato volba byla standardně vypnuta. V IdP řady 4 je tato volba standardně zapnuta, takže pokud instalujete novou verzi (myšleno neaktualizujete stávající IdP V3 na novou verzi), bude povoleno použití lokálního úložiště, pokud ho prohlížeč podporuje.
**Povolení lokálního HTML úložiště s sebou nese dopad na vzhled během přihlašování (probliknutí stránky) a vyžaduje v prohlížeči zapnutý JavaScript!**
Chcete-li zachovat chování jako v předchozích verzích IdP, musíte volbu //idp.storage.htmlLocalStorage// nastavit na hodnotu //false//.
Bližší informace naleznete v oficiální [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199509576/StorageConfiguration#StorageConfiguration-ClientStorageService|dokumentaci]].
Od Shibboleth IdP 4.0.0 se jako výchozí šifrovací algoritmus pro šifrování XML používá [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501202/GCMEncryption|AES-GCM]].
Starší verze IdP používaly AES-CBC. Nový algoritmus AES-GCM podporují aktuální operační systémy, na kterých je provozována aktuální verze Shibboleth SP anebo SimpleSAMLphp 1.19.0+. Nicméně ostatní implementace SAML protokolu tento protokol nepodporují a nebudou tedy fungovat.
Existuje více způsobů, jak k tomuto problému přistoupit v závislosti na potřebách konkrétního IdP. Ten nejvhodnější je samozřejmě tlačit na ostatní služby (a jimi používané implementace), aby podporu pro nový algoritmus zařadili. Nejjednodušší způsob je zakomentovat volbu //idp.encryption.config//, ale **správné řešení naleznete v [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501202/GCMEncryption|dokumentaci]] po jejím přečtení a pochopení**.
# Otevřeme konfigurační soubor idp.properties
vim /opt/shibboleth-idp/conf/idp.properties
Nastavíme ''idp.consent.StorageService'' na hodnotu ''shibboleth.JPAStorageService'' a případně i ''idp.storage.htmlLocalStorage'' na ''false''. V případě, že potřebujeme, aby IdP komunikovalo i se službami nepodporující šifrovací algoritmus AES-GCM, můžeme **po přečtení a pochopení [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501202/GCMEncryption|dokumentace]]** zakomentovat ''idp.encryption.config'', **pokud opravdu chceme vypnout a zakázat nový způsob bezpečného šifrování**:
idp.consent.StorageService = shibboleth.JPAStorageService
idp.storage.htmlLocalStorage = false
#idp.encryption.config=shibboleth.EncryptionConfiguration.GCM
==== ldap.properties ====
V souboru ''/opt/shibboleth-idp/conf/ldap.properties'' nastavíme konektor do LDAP serveru, pomocí něhož budeme získávat uživatelské atributy.
# Otevřeme konfigurační soubor ldap.properties
vim /opt/shibboleth-idp/conf/ldap.properties
Důležité jsou především následující volby:
idp.authn.LDAP.authenticator = bindSearchAuthenticator
idp.authn.LDAP.ldapURL = ldaps://ldap.example.org:636
idp.authn.LDAP.useStartTLS = false
idp.authn.LDAP.sslConfig = certificateTrust
idp.authn.LDAP.trustCertificates = %{idp.home}/credentials/ldap-server.crt
idp.authn.LDAP.baseDN = ou=people,dc=example,dc=org
idp.authn.LDAP.subtreeSearch = true
idp.authn.LDAP.bindDN = uid=shibboleth,ou=users,dc=example,dc=org
První konfigurační parametr ''idp.authn.LDAP.authenticator'' určuje, jak se bude přistupovat k LDAP serveru. Výchozí (zakomentovaná) hodnota je //anonSearchAuthenticator//, takže se k LDAPu přistupuje anonymně. My však chceme, aby se dotazování LDAP serveru provádělo až po přihlášení, je potřeba nastavit volbu na hodnotu //bindSearchAuthenticator//.
Volba ''idp.authn.LDAP.ldapURL'' určuje, ke kterému LDAP serveru se bude Shibboleth připojovat. Ve výše uvedeném příkladu se připojuje pomocí zabezpečeného SSL (ldaps://) na stadardním portu ''636''.
**V ldapURL nesmíme uvést koncové lomítko, např. ''[[ldaps://ldap.example.org:636/]]'', jinak nebude Shibboleth fungovat a v logu najdeme ''java.lang.NumberFormatException: For input string: "636/"''.**
Konfigurační volba ''idp.authn.LDAP.useStartTLS'' určuje, jestli budeme používat StartTLS. Následující volba ''idp.authn.LDAP.trustCertificates'' udává cestu ke kořenovému certifikátu CA, která vydala SSL certifikát pro LDAP server ''ldap.example.org''.
**Je nutné nezapomenout nakopírovat soubor ''ldap-server.crt'' na odpovídající místo!**
Volba ''idp.authn.LDAP.baseDN'' určuje tzv. "base DN" v LDAPu. Volby ''idp.authn.LDAP.bindDN'' určuje uživatelské jméno, které se použije při přístupu k LDAP serveru pro získání uživatelských atributů.
==== secrets.properties ====
V souboru ''/opt/shibboleth-idp/credentials/secrets.properties'', který nově existuje v Shibboleth IdP od verze 4.0.0, nastavíme heslo k LDAP serveru a sůl pro //persistentní NameID identifikátor// / atribut //eduPersonTargetedID//, kterou si vygenerujeme.
# Vygenerování soli
openssl rand -base64 36
# Otevřeme konfigurační soubor secrets.properties
vim /opt/shibboleth-idp/credentials/secrets.properties
Volba ''idp.authn.LDAP.bindDNCredential'' obsahuje heslo, které se použije při přístupu k LDAPu. Heslo je pro uživatelský účet definovaný v ''idp.authn.LDAP.bindDN'' v ''/opt/shibboleth-idp/conf/ldap.properties'' souboru. Volba ''idp.persistentId.salt'' definuje sůl pro persistentní NameID identifikátor, kterou jsme si právě vygenerovali.
Nikdy neměňte hodnotu v ''idp.persistentId.salt'', pokud již máte v současné produkční verzi IdP nějakou sůl vygenerovanou.
idp.authn.LDAP.bindDNCredential = ___HESLO_PRO_BIND_K_LDAP_SERVERU___
idp.persistentId.salt = ___SŮL_PRO_GENEROVÁNÍ_IDENTIFIKÁTORŮ___
==== metadata-providers.xml ====
V konfiguračním souboru ''/opt/shibboleth-idp/conf/metadata-providers.xml'' se nastavují zdroje metadat. V následujícím příkladu je jako zdroj metadat použita federace //eduID.cz// i mezinárodní federace //eduGAIN//. Metadata se stáhnou a lokálně uloží.
# Otevřeme konfigurační soubor metadata-providers.xml
vim /opt/shibboleth-idp/conf/metadata-providers.xml
Blok kódu výše, tedy element ____ se všemi atributy a potomky, je nutné umístit do //kořenového// elementu ____ v konfiguračním souboru //metadata-providers.xml//! Sice to působí podivně, ale bez toho nebude XML dokument validní a konfigurace nebude fungovat.
Pokud by vás zajímal význam atributů v elementu '''', naleznete vše [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199506865/FileBackedHTTPMetadataProvider|v oficiální dokumentaci]]. Vše okolo '''' elementu naleznete také [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199507005/MetadataFilterConfiguration|v oficiální dokumentaci]].
Pokud jsme se v sekci [[#idpproperties|idp.properties]] správně rozhodli využívat primárně nový bezpečnější způsob šifrování pomocí AES-GCM, je velice vhodné vytvořit sekci pro služby, které toto šifrování nepodporují a povolit u nich starší způsob šifrování pomocí AES-CBC, jinak nebude možné se k nim přihlásit.
Níže uvedený seznam výjimek (složený z entityID služeb podporujících pouze AES-CBC) zajistí, že IdP bude primárně používat nové šifrování a staré pouze pro vyjmenované služby. Seznam níže uvedených služeb by měl být kompletní. Pokud byste narazili na problém, oznamte ho, prosím, na [[info@eduid.cz]].
Jelikož je z kapacitních důvodů velice komplikované otestovat podporu pro AES-GCM, tak pro eduGAIN je zvolen jiný přístup. Primárně se používá AES-CBC, pokud služba v metadatech sama neuvádí podporu pro AES-GCM. Bližší vysvětlení je nad rámec tohoto návodu, proto je zde uvedeno pouze aktuálně nejvhodnější řešení k 12. 5. 2020.
ccm.net.cvut.cz
https://adfs-ext.w2lan.cesnet.cz/adfs/services/trust
https://adfs.w2lan.cesnet.cz/adfs/services/trust
https://auth.eidas.cesnet.cz/sp
https://camelot.lf2.cuni.cz/shibboleth
https://cawi.fsv.cuni.cz/simplesaml/module.php/saml/sp/metadata.php/default-sp
https://collector-metacentrum.liberouter.org/simplesaml/module.php/saml/sp/metadata.php/collector
https://cz-online.aliveplatform.com/simplesaml/module.php/saml/sp/metadata.php/cz-online.aliveplatform.com
https://digi.law.muni.cz
https://digitool.is.cuni.cz/shibboleth
https://dspace.vsb.cz/sp/shibboleth
https://edu.ista.tacr.cz/ISTA
https://filesender.cesnet.cz/saml/sp
https://index.bbmri.cz/shibboleth
https://ista.tacr.cz/ISTA
https://itmulti.cz/simplesaml/module.php/saml/sp/metadata.php/portal4
https://journals.bmj.com/shibboleth
https://login.bbmri-eric.eu/proxy/
https://login.ceitec.cz/proxy/
https://login.ezproxy.is.cuni.cz/sp/shibboleth
https://login.ezproxy.uochb.cas.cz:2443/sp/shibboleth
https://login.ezproxy.vscht.cz/sp/shibboleth
https://mefanet-motol.cuni.cz/sp/shibboleth
https://meta.cesnet.cz/sp/shibboleth
https://mooc.cuni.cz/sp/shibboleth
https://nfsmon.ics.muni.cz/
https://odevzdej.cz/shibboleth/
https://orca.ruk.cuni.cz/shibboleth
https://pentest.cesnet.cz/sp/shibboleth
https://portal.lf3.cuni.cz/shibboleth/sp
https://postudium.cz/auth/saml2/sp/metadata.php
https://repozitar.cz/shibboleth/
https://seth.ics.muni.cz/shibboleth
https://softweco.cz/shibboleth-sp
https://su-dev.fit.vutbr.cz/kis
https://su-int.fit.vutbr.cz/kis
https://teleinform.cz/simplesaml/module.php/saml/sp/metadata.php/portal1
https://telekomunikace-tit.cz/simplesaml/module.php/saml/sp/metadata.php/portal3
https://test.ista.tacr.cz/ISTA
https://thalamoss-data.ics.muni.cz/shibboleth
https://theses.cz/shibboleth/
https://vut-vsb.cz/simplesaml/module.php/saml/sp/metadata.php/portal2
https://wikisofia.cz/shibboleth
https://www.bookport.cz/
https://www.citacepro.com/simplesaml/module.php/saml/sp/metadata.php/eduid-sp
https://www.eunis.cz/simplesamlphp/module.php/saml/sp/metadata.php/eunis
https://www.jib.cz/shibboleth
https://www.levna-knihovna.cz/simplesamlphp/module.php/saml/sp/metadata.php/default-sp
https://www.liberouter.org/simplesamlphp/module.php/saml/sp/metadata.php/liberouter
https://www.mecenat.eu/sp
https://www.vutbr.cz/SSO/saml2/sp
shibboleth.Conditions.TRUE
Metadata federací //eduID.cz// i //eduGAIN// jsou podepsána. **Důrazně doporučujeme tedy jejich autenticitu ověřovat pomocí kontroly podpisu!** Veřejný klíč je k dispozici na adrese https://www.eduid.cz/docs/eduid/metadata/metadata.eduid.cz.crt.pem. Stáhneme si ho a uložíme do adresáře ''/opt/shibboleth-idp/credentials''.
# Stažení veřejného klíče metadata.eduid.cz.crt.pem
wget -P /opt/shibboleth-idp/credentials \
https://www.eduid.cz/docs/eduid/metadata/metadata.eduid.cz.crt.pem
==== attribute-resolver.xml ====
Chceme-li si konfigurační soubor ''/opt/shibboleth-idp/conf/attribute-resolver.xml'' nakonfigurovat od začátku a naprosto sami, využijeme k tomu soubor ''/opt/shibboleth-idp/conf/examples/attribute-resolver-ldap.xml'', který v sobě zahrnuje i konektor do LDAP serveru.
Doporučujeme však vyjít z připraveného souboru na adrese [[https://www.eduid.cz/shibboleth-idp/attribute-resolver.xml]]. [[cs:tech:attributes]] naleznete v dokumentaci. Podle tohoto seznamu si ''attribute-resolver.xml'' můžeme upravit.
**Návod v následujících krocích předpokládá, že jsme použili připravenou šablonu!**
Navíc se předpokládá, že pro generování persistentního NameID identifikátoru používáte atribut ''uid''. Tento SAML atribut nesmí mít v ''attribute-resolver.xml'' XML atribut //dependencyOnly="true"//, jinak nebude pro generování persistentního NameID k dispozici a persistentní NameID se nevygeneruje.
**Některé služby bez persistentního NameID nebudou fungovat!**
# Stažení attribute-resolver.xml
wget -O /opt/shibboleth-idp/conf/attribute-resolver.xml \
https://www.eduid.cz/shibboleth-idp/attribute-resolver.xml
Potřebujeme-li si definovat své vlastní atributy, pak bližší informace ke konfiguraci nalezneme [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199502864/AttributeResolverConfiguration|v oficiální dokumentaci]].
Budete-li sledovat logy (//idp-process.log// a //idp-warn.log//), objevíte tam varování týkající se zastaralého "SAML2NameID". To můžete ignorovat.
==== cesnetAttributes.xml ====
Sdružení CESNET definuje pro federaci eduID.cz několik atributů, které jsou definovány právě v souboru ''cesnetAttributes.xml'', čímž se zjednoduší konfigurační soubor ''attribute-resolver.xml''. Doporučujeme tedy tento soubor stáhnout z našeho weby.
# Stažení cesnetAttributes.xml
wget -O /opt/shibboleth-idp/conf/attributes/cesnetAttributes.xml \
https://www.eduid.cz/shibboleth-idp/cesnetAttributes.xml
==== default-rules.xml ====
Aby si Shibboleth IdP načetl soubor ''cesnetAttributes.xml'', který obsahuje definice atributů pro federaci eduID.cz (vizte výše), je nutné přidat jeho načtení do souboru ''default-rules.xml'' ideálně ihned za import ostatních konfiguračních souborů s atributy:
Pro jednoduchost je možné tento konfigurační soubor stáhnout z našeho webu.
# Stažení default-rules.xml
wget -O /opt/shibboleth-idp/conf/attributes/default-rules.xml \
https://www.eduid.cz/shibboleth-idp/default-rules.xml
==== eduPerson.xml ====
Aby se v českém prostředí (závisí na nastavení webového prohlížeče) v přehledu uvolňovaných atributů zobrazovaly české popisy atributů z rodiny "eduPerson", je nutné doplnit překlady do souboru ''eduPerson.xml''. To lze nejsnadněji udělat tak, že si tento soubor stáhnete z našeho webu.
# Stažení eduPerson.xml
wget -O /opt/shibboleth-idp/conf/attributes/eduPerson.xml \
https://www.eduid.cz/shibboleth-idp/eduPerson.xml
==== inetOrgPerson.xml ====
Aby se v českém prostředí (závisí na nastavení webového prohlížeče) v přehledu uvolňovaných atributů zobrazovaly české popisy atributů z rodiny "inetOrgPerson", je nutné doplnit překlady do souboru ''inetOrgPerson.xml''. To lze nejsnadněji udělat tak, že si tento soubor stáhnete z našeho webu.
# Stažení inetOrgPerson.xml
wget -O /opt/shibboleth-idp/conf/attributes/inetOrgPerson.xml \
https://www.eduid.cz/shibboleth-idp/inetOrgPerson.xml
==== attribute-filter.xml ====
Mít definované atributy z předchozího kroku nestačí. Ještě je potřeba nadefinovat, které atributy budeme vydávat a komu je budeme vydávat. To se nastavuje v konfiguračním souboru ''/opt/shibboleth-idp/conf/attribute-filter.xml''.
Z důvodu zjednodušení doporučujeme uvolňovat atributy dle našeho doporučení na adrese [[https://www.eduid.cz/shibboleth-idp/attribute-filter.xml]].
Filtr uvolňuje atributy podle kategorií entit [[cs:tech:categories:rs]], [[cs:tech:categories:coco]] a dále do federací [[cs:tech:summary|eduID.cz]] a [[cs:tech:edugain|eduGAIN]].
wget -O /opt/shibboleth-idp/conf/attribute-filter.xml \
https://www.eduid.cz/shibboleth-idp/attribute-filter.xml
Chcete-li si nastavit uvolňování atributů dle svého, tak bližší informace naleznete [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501794/AttributeFilterConfiguration|v oficiální dokumentaci]].
==== idp-metadata.xml ====
Soubor ''/opt/shibboleth-idp/metadata/idp-metadata.xml'' obsahuje metadata IdP, která je potřeba po instalaci doplnit o další informace jako například element '''', který se zapisuje do "rozšíření" (element ''''), např. za '''':
# Otevřeme konfigurační soubor idp-metadata.xml
vim /opt/shibboleth-idp/metadata/idp-metadata.xml
example.org
EXAMPLE
EXAMPLE
EXAMPLE's Identity Provider.
Poskytovatel identity pro EXAMPLE.
http://www.example.org/en/
http://www.example.org/cs/
https://img.example.org/logo-200.gif
Dále je nutno doplnit název organizace v elementu '''' (patří do elementu '''' za element ''''):
EXAMPLE, a. l. e.
EXAMPLE, z. s. p. o.
EXAMPLE
EXAMPLE
http://www.example.org/en/
http://www.example.org/cs/
Chybět nesmí ani kontaktní osoby v elementu '''' (opět v elementu '''' za element ''''):
Kryštof
Šáteček
mailto:krystof.satecek@example.org
==== global.xml ====
Nyní je potřeba v souboru ''global.xml'' definovat některé "y". Tato konfigurace zajistí správnou konektivitu na //MariaDB// databázi pro ukládání persistentních identifikátorů a zároveň pro ukládání souhlasů s vydáváním atributů (tzv. uApprove).
# Úpravy v konfiguračním souboru global.xml
vim /opt/shibboleth-idp/conf/global.xml
V prvním bloku kódu nahradíme ''___SILNE_HESLO___'' heslem pro uživatele //shibboleth// k databázi //shibboleth//.
==== saml-nameid.properties ====
Dále musíme provést úpravy v konfiguračním souboru ''saml-nameid.properties''.
# Úpravy v konfiguračním souboru saml-nameid.properties
vim /opt/shibboleth-idp/conf/saml-nameid.properties
Zde definujeme odkazy na výše definované "y", dále atribut, který se bude pro výpočet persistentního identifikátoru používat (''uid'').
idp.persistentId.sourceAttribute = uid
# Nové IdP (BASE32)
idp.persistentId.encoding = BASE32
# Migrované IdP (BASE64)
#idp.persistentId.encoding = BASE64
idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator
idp.persistentId.dataSource = shibboleth.MySQLDataSource
==== saml-nameid.xml ====
Podpora persistentních identifikátorů je ještě potřeba zapnout v konfiguračním souboru ''saml-nameid.xml''.
# Úpravy v konfiguračním souboru saml-nameid.xml
vim /opt/shibboleth-idp/conf/saml-nameid.xml
Stačí odkomentovat následující řádek, který je ve výchozí konfiguraci po instalaci IdP zakomentovaný.
==== subject-c14n.xml ====
Teď ještě zbývá úprava v souboru ''subject-c14n.xml''.
# Úpravy v konfiguračním souboru subject-c14n.xml
vim /opt/shibboleth-idp/conf/c14n/subject-c14n.xml
Odkomentujeme tedy následující řádek:
==== messages_cs.properties ====
Ve výchozím nastavení IdP s uživatelem přes webový prohlížeč komunikuje v angličtině. Pokud chceme, aby texty na stránkách IdP byly v češtině, musíme do IdP dodat české překlady. Ty jsou dostupné na webu [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501275/MessagesTranslation|Shibbolethu]] a jsou pravidelně udržovány. (Pokud byste našli chybu nebo uměli dodat lepší překlad, na stránce najdete i postup, jak k překladům přispět.)
Jazyk, který bude použit, se určuje na základě nastavení webového prohlížeče. Takže pokud má uživatel v prohlížeči preferovaný jazyk angličtinu, IdP bude všechny texty vypisovat v angličtině.
# Stažení českých překladů
wget https://shibboleth.atlassian.net/wiki/download/attachments/1265631751/messages_cs.properties \
-O /opt/shibboleth-idp/messages/messages_cs.properties
===== Spuštění =====
Nyní, když máme IdP nakonfigurováno, opravíme práva v adresáři ''/opt/shibboleth-idp'':
# Úprava práv
chown jetty /opt/shibboleth-idp/{logs,metadata}
chgrp -R jetty /opt/shibboleth-idp/{conf,credentials}
chmod -R g+r /opt/shibboleth-idp/conf
chmod 750 /opt/shibboleth-idp/credentials
chmod 640 /opt/shibboleth-idp/credentials/*
V systemd musíme Jetty povolit přístup pro zápis do adresářů s logy a metadaty.
# Úprava služby jetty11 v systemd
systemctl edit jetty11
Nastavení práv pro záspis do adresářů ''/opt/shibboleth-idp/{logs,metadata}'':
[Service]
ReadWritePaths=/opt/shibboleth-idp/logs/
ReadWritePaths=/opt/shibboleth-idp/metadata/
Přidání doplňků a potvrdíme dvakrát pomocí y a enter.
/opt/shibboleth-idp/bin/plugin.sh -I net.shibboleth.plugin.storage.jdbc
/opt/shibboleth-idp/bin/plugin.sh -I net.shibboleth.idp.plugin.nashorn
Zbývá jen znovu načíst konfiguraci pro službu Jetty a tu následně restartovat:
# Restart Jetty
systemctl daemon-reload
systemctl restart jetty11
Nyní, jakmile Jetty po chvilce nastartuje, můžeme vyzkoušet, zda IdP v pořádku běží:
# Zobrazení stavu IdP
/opt/shibboleth-idp/bin/status.sh
Pokud IdP korektně běží, uvidíte následující:
### Operating Environment Information
operating_system: Linux
operating_system_version: 6.1.0-17-amd64
operating_system_architecture: amd64
jdk_version: 17.0.9
available_cores: 1
used_memory: 551 MB
maximum_memory: 1500 MB
### Identity Provider Information
idp_version: 5.0.0
start_time: 2024-01-08T13:37:39.849Z
current_time: 2024-01-08T13:37:41.870585878Z
uptime: PT2.021S
enabled modules:
idp.Core (Core IdP Functions (Required))
idp.CommandLine (Command Line Scripts)
idp.EditWebApp (Overlay Tree for WAR Build)
idp.authn.Password (Password Authentication)
idp.admin.Hello (Hello World)
installed plugins:
net.shibboleth.idp.plugin.nashorn Version 2.0.0
net.shibboleth.plugin.storage.jdbc Version 2.0.0
service: shibboleth.LoggingService
last successful reload attempt: 2024-01-08T13:36:14.071738505Z
last reload attempt: 2024-01-08T13:36:14.071738505Z
service: shibboleth.AttributeFilterService
last successful reload attempt: 2024-01-08T13:36:39.855671743Z
last reload attempt: 2024-01-08T13:36:39.855671743Z
service: shibboleth.AttributeResolverService
last successful reload attempt: 2024-01-08T13:36:40.005816408Z
last reload attempt: 2024-01-08T13:36:40.005816408Z
No Data Connector has ever failed
service: shibboleth.AttributeRegistryService
last successful reload attempt: 2024-01-08T13:36:17.429465810Z
last reload attempt: 2024-01-08T13:36:17.429465810Z
service: shibboleth.NameIdentifierGenerationService
last successful reload attempt: 2024-01-08T13:36:41.444220674Z
last reload attempt: 2024-01-08T13:36:41.444220674Z
service: shibboleth.RelyingPartyResolverService
last successful reload attempt: 2024-01-08T13:36:41.542714468Z
last reload attempt: 2024-01-08T13:36:41.542714468Z
service: shibboleth.MetadataResolverService
last successful reload attempt: 2024-01-08T13:36:18.003662057Z
last reload attempt: 2024-01-08T13:36:18.003662057Z
metadata source: eduidcz
last refresh attempt: 2024-01-08T13:36:18.602115911Z
last successful refresh: 2024-01-08T13:36:18.602115911Z
last update: 2024-01-08T13:36:18.602115911Z
root validUntil: 2024-02-03T23:53:01Z
metadata source: edugain
last refresh attempt: 2024-01-08T13:36:23.567438235Z
last successful refresh: 2024-01-08T13:36:23.567438235Z
last update: 2024-01-08T13:36:23.567438235Z
root validUntil: 2024-02-04T14:03:02Z
service: shibboleth.ReloadableAccessControlService
last successful reload attempt: 2024-01-08T13:36:42.376372150Z
last reload attempt: 2024-01-08T13:36:42.376372150Z
service: shibboleth.ReloadableCASServiceRegistry
last successful reload attempt: 2024-01-08T13:36:42.426232528Z
last reload attempt: 2024-01-08T13:36:42.426232528Z
service: shibboleth.ManagedBeanService
last successful reload attempt: 2024-01-08T13:36:42.454961810Z
last reload attempt: 2024-01-08T13:36:42.454961810Z
===== Testování =====
Od verze 4.1.2 existuje modul [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199510241/HelloWorldConfiguration|Hello]], pomocí kterého je možné IdP testovat i bez napojení na federaci.
Tento modul je po instalaci zapnutý. Pokud by však zapnutý náhodou nebyl, zapnete ho jednoduše:
# Zapnutí modulu Hello
/opt/shibboleth-idp/bin/module.sh -e idp.admin.Hello
Nyní zbývá nastavit uživatele, který se bude moci k tomuto diagnostickému modulu přihlásit. To se konfiguruje v souboru ''conf/access-control.xml'' ve volbě //AccessByAdminUser//, kde je ve výchozím nastavení hodnota ''jdoe'' (tato hodnota odpovídá přihlašovacímu jménu):
Následně na adrese ''/idp/profile/admin/hello'' našeho IdP můžeme přistoupit k modulu a po úspěšném přihlášení vidět seznam atributů a jejich hodnot, které bude umět IdP uvolnit službám ve federaci.
Po otestování je možné modul //Hello// vypnout a restartovat Jetty:
# Vypnutí modulu Hello
/opt/shibboleth-idp/bin/module.sh -d idp.admin.Hello
# Restartování Jetty
systemctl restart jetty11
===== Tipy =====
Na stránce [[cs:tech:idp:shibboleth:advanced]] naleznete některé zajímavé konfigurační tipy, které by vás mohly zajímat, proto se na stránku určitě podívejte.
===== Vzhled =====
Výchozí přihlašovací stránka vypadá následujícím způsobem:
{{:cs:tech:idp:shib-loginpage-default-new2.png|Výchozí vzhled přihlašovací stránky.}}
Její vzhled je možno upravit do vzhledu podobnému stránkám naší organizace. Veškeré úpravy se provádí v adresáři ''/opt/shibboleth-idp/views/''. Výchozí nastavení je možné najít v ''/opt/shibboleth-idp/dist/views/'', kde se můžete inspirovat.
Změny provedené v souborech s koncovkou ve ''views/*.vm'' se projeví okamžitě a není potřeba generovat nový ''idp.war'' ani restartovat Jetty.
----
====== Publikace metadat ======
**Máme-li nainstalován Shibboleth IdP, můžeme pokračovat [[cs:tech:metadata-publication|publikací metadat]].**