Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze Následující verze Obě strany příští revize | ||
cs:tech:idp:shibboleth [2019/12/13 18:48] jan.oppolzer@cesnet.cz [Shibboleth IdP] |
cs:tech:idp:shibboleth [2020/06/04 11:21] jan.oppolzer@cesnet.cz [Instalace] aktualizace na V4.0.1 |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Shibboleth IdP 3 ====== | + | ====== 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 [[cs:tech:idp:jetty]].** | **Na této stránce se nachází návod, jak do linuxové distribuce Debian nainstalovat Shibboleth IdP. Před instalací musíme zprovoznit [[cs:tech:idp:jetty]].** | ||
+ | |||
+ | <WRAP important> | ||
+ | **Podpora pro Shibboleth IdP řady 3 bude ukončena k 31. 12. 2020. Tento návod se tedy týká již nové řady 4.** | ||
+ | </WRAP> | ||
+ | |||
+ | <WRAP tip> | ||
+ | Dne 12. 5. 2020 byl návod rozšířen o úpravy konfiguračního souboru [[#metadata-providersxml|metadata-providers.xml]] pro využívání primárně AES-GCM šifrování před starým AES-CBC. | ||
+ | |||
+ | V případě potíží nebo nejasností se neváhejte obrátit na [[info@eduid.cz]]. | ||
+ | </WRAP> | ||
---- | ---- | ||
Řádek 7: | Řádek 17: | ||
===== Instalace ===== | ===== Instalace ===== | ||
- | Zdrojové kódy stáhneme [[https://shibboleth.net/downloads/identity-provider/3.4.6/|ze stránky projektu]] a umístíme do adresáře ''/opt'' anebo pomocí programu //wget// následujícím způsobem. Nezapomeneme ověřit SHA256 otisk a GPG podpis. | + | Zdrojové kódy stáhneme [[https://shibboleth.net/downloads/identity-provider/4.0.1/|ze stránky projektu]] a umístíme do adresáře ''/opt'' anebo pomocí programu //wget// následujícím způsobem. Nezapomeneme ověřit SHA256 otisk a GPG podpis. |
<code bash> | <code bash> | ||
# Stažení zdrojového kódu Shibboleth IdP | # Stažení zdrojového kódu Shibboleth IdP | ||
wget -P /opt \ | wget -P /opt \ | ||
- | https://shibboleth.net/downloads/identity-provider/3.4.6/shibboleth-identity-provider-3.4.6.tar.gz \ | + | https://shibboleth.net/downloads/identity-provider/4.0.1/shibboleth-identity-provider-4.0.1.tar.gz \ |
- | https://shibboleth.net/downloads/identity-provider/3.4.6/shibboleth-identity-provider-3.4.6.tar.gz.asc \ | + | https://shibboleth.net/downloads/identity-provider/4.0.1/shibboleth-identity-provider-4.0.1.tar.gz.asc \ |
- | https://shibboleth.net/downloads/identity-provider/3.4.6/shibboleth-identity-provider-3.4.6.tar.gz.sha256 | + | https://shibboleth.net/downloads/identity-provider/4.0.1/shibboleth-identity-provider-4.0.1.tar.gz.sha256 |
# Přepnutí do adresáře /opt | # Přepnutí do adresáře /opt | ||
Řádek 20: | Řádek 30: | ||
# Kontrola SHA256 otisku | # Kontrola SHA256 otisku | ||
- | sha256sum -c shibboleth-identity-provider-3.4.6.tar.gz.sha256 | + | sha256sum -c shibboleth-identity-provider-4.0.1.tar.gz.sha256 |
# Kontrola GPG podpisu | # Kontrola GPG podpisu | ||
- | # Nejprve importujeme klíč 07CEEB8B | + | gpg --verify shibboleth-identity-provider-4.0.1.tar.gz.asc |
- | gpg --keyserver hkp://keys.gnupg.net --search-keys 07CEEB8B | + | |
- | # Nyní můžeme provést samotnou kontrolu | + | |
- | gpg --verify shibboleth-identity-provider-3.4.6.tar.gz.asc | + | |
</code> | </code> | ||
Řádek 33: | Řádek 40: | ||
<code bash> | <code bash> | ||
# Instalace Shibboleth IdP | # Instalace Shibboleth IdP | ||
- | tar -xzf shibboleth-identity-provider-3.4.6.tar.gz | + | tar -xzf shibboleth-identity-provider-4.0.1.tar.gz |
- | cd shibboleth-identity-provider-3.4.6/ | + | cd shibboleth-identity-provider-4.0.1/ |
./bin/install.sh | ./bin/install.sh | ||
</code> | </code> | ||
Řádek 40: | Řádek 47: | ||
Po spuštění instalačního skriptu: | Po spuštění instalačního skriptu: | ||
- potvrdíme zdrojový instalační adresář, | - potvrdíme zdrojový instalační adresář, | ||
+ | - potvrdíme cílový instalační adresář, | ||
- vyplníme hostname serveru (pokud není vyplněn správně), | - vyplníme hostname serveru (pokud není vyplněn správně), | ||
+ | - vložíme opakovaně dvě hesla (//Backchannel PKCS12 Password// a //Cookie Encryption Key Password//), která si předem vygenerujeme pomocí příkazu ''openssl rand -hex 20'', | ||
- potvrdíme entityID, | - potvrdíme entityID, | ||
- | - zadáme scope organizace (pokud není vyplněn správně), | + | - zadáme scope organizace (pokud není vyplněn správně). |
- | - vložíme opakovaně dvě hesla (//Backchannel PKCS12 Password// a //Cookie Encryption Key Password//), která si předem vygenerujeme pomocí příkazu ''openssl rand -hex 20''. | + | |
Zde je vyobrazen průběh instalačního skriptu ''install.sh''. | Zde je vyobrazen průběh instalačního skriptu ''install.sh''. | ||
<code bash> | <code bash> | ||
- | Source (Distribution) Directory (press <enter> to accept default): [/opt/shibboleth-identity-provider-3.4.6] | + | Buildfile: /opt/shibboleth-identity-provider-4.0.1/bin/build.xml |
- | Installation Directory: [/opt/shibboleth-idp] | + | install: |
+ | Source (Distribution) Directory (press <enter> to accept default): [/opt/shibboleth-identity-provider-4.0.1] ? | ||
- | Hostname: [idp.example.org] | + | Installation Directory: [/opt/shibboleth-idp] ? |
- | SAML EntityID: [https://idp.example.org/idp/shibboleth] | + | |
- | Attribute Scope: [example.org] | + | |
- | Backchannel PKCS12 Password: | + | INFO [net.shibboleth.idp.installer.V4Install:151] - New Install. Version: 4.0.1 |
- | Re-enter password: | + | Host Name: [idp.example.org] ? |
- | Cookie Encryption Key Password: | + | |
- | Re-enter password: | + | INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-signing, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072 |
- | Warning: /opt/shibboleth-idp/bin does not exist. | + | INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-encryption, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072 |
- | Warning: /opt/shibboleth-idp/edit-webapp does not exist. | + | Backchannel PKCS12 Password: |
- | Warning: /opt/shibboleth-idp/dist does not exist. | + | Re-enter password: |
- | Warning: /opt/shibboleth-idp/doc does not exist. | + | INFO [net.shibboleth.idp.installer.V4Install:592] - Creating backchannel keystore, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072 |
- | Warning: /opt/shibboleth-idp/system does not exist. | + | Cookie Encryption Key Password: |
- | Generating Signing Key, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth ... | + | Re-enter password: |
- | ...done | + | INFO [net.shibboleth.idp.installer.V4Install:633] - Creating backchannel keystore, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth, keySize=3072 |
- | Creating Encryption Key, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth ... | + | INFO [net.shibboleth.utilities.java.support.security.BasicKeystoreKeyStrategyTool:166] - No existing versioning property, initializing... |
- | ...done | + | SAML EntityID: [https://idp.example.org/idp/shibboleth] ? |
- | Creating Backchannel keystore, CN = idp.example.org URI = https://idp.example.org/idp/shibboleth ... | + | |
- | ...done | + | Attribute Scope: [example.org] ? |
- | Creating cookie encryption key files... | + | |
- | ...done | + | INFO [net.shibboleth.idp.installer.V4Install:433] - Creating Metadata to /opt/shibboleth-idp/metadata/idp-metadata.xml |
- | Rebuilding /opt/shibboleth-idp/war/idp.war ... | + | INFO [net.shibboleth.idp.installer.BuildWar:71] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.0.1 |
- | ...done | + | 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 | BUILD SUCCESSFUL | ||
- | Total time: 28 seconds | + | Total time: 37 seconds |
</code> | </code> | ||
Řádek 90: | Řádek 99: | ||
==== idp.properties ==== | ==== idp.properties ==== | ||
- | V souboru ''/opt/shibboleth-idp/conf/idp.properties'' nastavíme, že všechny cookies budou limitovány na TLS. Bližší informace jsou k dispozici [[https://wiki.shibboleth.net/confluence/display/IDP30/SecurityConfiguration#SecurityConfiguration-Properties|v oficiální dokumentaci]]. | + | V souboru ''/opt/shibboleth-idp/conf/idp.properties'' nastavíme podporu pro 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. |
+ | |||
+ | <WRAP tip> | ||
+ | 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. | ||
+ | |||
+ | 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://wiki.shibboleth.net/confluence/display/IDP4/StorageConfiguration#StorageConfiguration-ClientStorageService|dokumentaci]]. | ||
+ | </WRAP> | ||
+ | |||
+ | <WRAP alert> | ||
+ | Od Shibboleth IdP 4.0.0 se jako výchozí šifrovací algoritmus pro šifrování XML používá [[https://wiki.shibboleth.net/confluence/display/IDP4/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. Nicméně ostatní implementace SAML protokolu, např. SimpleSAMLphp a další, tento protokol nepodporují a nebudou tedy fungovat. | ||
- | Dále doplníme podporu pro ukládání souhlasů s vydáváním uživatelských informací (atributů) do databáze. | + | 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://wiki.shibboleth.net/confluence/display/IDP4/GCMEncryption|dokumentaci]] po jejím přečtení a pochopení**. |
+ | </WRAP> | ||
<code bash> | <code bash> | ||
Řádek 99: | Řádek 122: | ||
</code> | </code> | ||
- | Nastavíme ''idp.cookie.secure'' na hodnotu ''true'' a ''idp.consent.StorageService'' na hodnotu ''shibboleth.JPAStorageService'': | + | 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://wiki.shibboleth.net/confluence/display/IDP4/GCMEncryption|dokumentace]]** zakomentovat ''idp.encryption.config'', **pokud opravdu chceme vypnout a zakázat nový způsob bezpečného šifrování**: |
<code ini> | <code ini> | ||
- | idp.cookie.secure = true | ||
idp.consent.StorageService = shibboleth.JPAStorageService | idp.consent.StorageService = shibboleth.JPAStorageService | ||
+ | idp.storage.htmlLocalStorage = false | ||
+ | #idp.encryption.config=shibboleth.EncryptionConfiguration.GCM | ||
</code> | </code> | ||
Řádek 127: | Řádek 151: | ||
idp.authn.LDAP.subtreeSearch = true | idp.authn.LDAP.subtreeSearch = true | ||
idp.authn.LDAP.bindDN = uid=shibboleth,ou=users,dc=example,dc=org | idp.authn.LDAP.bindDN = uid=shibboleth,ou=users,dc=example,dc=org | ||
- | idp.authn.LDAP.bindDNCredential = nejakeheslo | ||
idp.ldaptive.provider = org.ldaptive.provider.unboundid.UnboundIDProvider | idp.ldaptive.provider = org.ldaptive.provider.unboundid.UnboundIDProvider | ||
</code> | </code> | ||
Řádek 139: | Řádek 162: | ||
Konfigurační volby ''idp.authn.LDAP.useStartTLS'' a ''idp.authn.LDAP.useSSL'' říkají, že namísto TLS budeme používat SSL. 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 tento soubor na odpovídající místo!** | Konfigurační volby ''idp.authn.LDAP.useStartTLS'' a ''idp.authn.LDAP.useSSL'' říkají, že namísto TLS budeme používat SSL. 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 tento soubor na odpovídající místo!** | ||
- | Volba ''idp.authn.LDAP.baseDN'' určuje tzv. "base DN" v LDAPu. Volby ''idp.authn.LDAP.bindDN'' a ''idp.authn.LDAP.bindDNCredential'' určují uživatelské jméno a heslo, které se použije při přístupu k LDAP serveru pro získání uživatelských atributů. | + | 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ů. |
Volba na posledním řádku (''idp.ldaptive.provider'') je důležitá pro fungování LDAPu při použití vyšší verze Javy než 8 (náš případ). **Bez přidání této volby se Shibboleth IdP k LDAPu nepřípojí!** Bližší informace naleznete [[https://wiki.shibboleth.net/confluence/display/IDP30/LDAPonJava%3E8|v oficiální dokumentaci]]. | Volba na posledním řádku (''idp.ldaptive.provider'') je důležitá pro fungování LDAPu při použití vyšší verze Javy než 8 (náš případ). **Bez přidání této volby se Shibboleth IdP k LDAPu nepřípojí!** Bližší informace naleznete [[https://wiki.shibboleth.net/confluence/display/IDP30/LDAPonJava%3E8|v oficiální dokumentaci]]. | ||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | <code bash> | ||
+ | # Vygenerování soli | ||
+ | openssl rand -base64 36 | ||
+ | |||
+ | # Otevřeme konfigurační soubor secrets.properties | ||
+ | vim /opt/shibboleth-idp/credentials/secrets.properties | ||
+ | </code> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code ini> | ||
+ | idp.authn.LDAP.bindDNCredential = ___NEJAKE_HESLO___ | ||
+ | idp.persistentId.salt = ___NEJAKA_SUL___ | ||
+ | </code> | ||
==== metadata-providers.xml ==== | ==== metadata-providers.xml ==== | ||
Řádek 159: | Řádek 201: | ||
backingFile="%{idp.home}/metadata/eduidcz.xml" | backingFile="%{idp.home}/metadata/eduidcz.xml" | ||
metadataURL="https://metadata.eduid.cz/entities/eduid+sp" | metadataURL="https://metadata.eduid.cz/entities/eduid+sp" | ||
- | maxRefreshDelay="PT15M"> | + | maxRefreshDelay="PT30M"> |
<MetadataFilter | <MetadataFilter | ||
xsi:type="SignatureValidation" | xsi:type="SignatureValidation" | ||
requireSignedRoot="true" | requireSignedRoot="true" | ||
certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | ||
- | <MetadataFilter xsi:type="EntityRoleWhiteList"> | + | |
- | <RetainedRole>md:SPSSODescriptor</RetainedRole> | + | <MetadataFilter |
+ | xsi:type="RequiredValidUntil" | ||
+ | maxValidityInterval="P30D" /> | ||
+ | |||
+ | </MetadataProvider> | ||
+ | |||
+ | <!-- eduGAIN --> | ||
+ | <MetadataProvider | ||
+ | id="edugain" | ||
+ | xsi:type="FileBackedHTTPMetadataProvider" | ||
+ | backingFile="%{idp.home}/metadata/edugain.xml" | ||
+ | metadataURL="https://metadata.eduid.cz/entities/edugain+sp" | ||
+ | maxRefreshDelay="PT30M"> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="SignatureValidation" | ||
+ | requireSignedRoot="true" | ||
+ | certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="RequiredValidUntil" | ||
+ | maxValidityInterval="P30D" /> | ||
+ | |||
+ | </MetadataProvider> | ||
+ | </code> | ||
+ | |||
+ | //Blok kódu výše, tedy element <MetadataProvider> se všemi atributy a potomky, je nutné umístit do elementu <MetadataProvider> 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 ''<MetadataProvider>'', naleznete vše [[https://wiki.shibboleth.net/confluence/display/IDP4/FileBackedHTTPMetadataProvider|v oficiální dokumentaci]]. Vše okolo ''<MetadataFilter>'' elementu naleznete také [[https://wiki.shibboleth.net/confluence/display/IDP4/MetadataFilterConfiguration|v oficiální dokumentaci]]. | ||
+ | |||
+ | <WRAP tip> | ||
+ | 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. | ||
+ | |||
+ | <code xml> | ||
+ | <!-- eduID.cz --> | ||
+ | <MetadataProvider | ||
+ | id="eduidcz" | ||
+ | xsi:type="FileBackedHTTPMetadataProvider" | ||
+ | backingFile="%{idp.home}/metadata/eduidcz.xml" | ||
+ | metadataURL="https://metadata.eduid.cz/entities/eduid+sp" | ||
+ | maxRefreshDelay="PT30M"> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="SignatureValidation" | ||
+ | requireSignedRoot="true" | ||
+ | certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="RequiredValidUntil" | ||
+ | maxValidityInterval="P30D" /> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="Algorithm"> | ||
+ | |||
+ | <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> | ||
+ | <Entity>ccm.net.cvut.cz</Entity> | ||
+ | <Entity>http://fastwiki.vutbr.cz/simplesaml/module.php/saml/sp/metadata.php/fastwiki</Entity> | ||
+ | <Entity>http://www.stawiki.cz/simplesaml/module.php/saml/sp/metadata.php/stawiki</Entity> | ||
+ | <Entity>https://adfs-4t.w2lan.cesnet.cz/adfs/services/trust</Entity> | ||
+ | <Entity>https://adm.hostel.eduid.cz/shibboleth</Entity> | ||
+ | <Entity>https://auth.eidas.cesnet.cz/sp</Entity> | ||
+ | <Entity>https://auth.services.bmj.com/auth</Entity> | ||
+ | <Entity>https://camelot.lf2.cuni.cz/shibboleth</Entity> | ||
+ | <Entity>https://cawi.fsv.cuni.cz/simplesaml/module.php/saml/sp/metadata.php/default-sp</Entity> | ||
+ | <Entity>https://collector-metacentrum.liberouter.org/simplesaml/module.php/saml/sp/metadata.php/collector</Entity> | ||
+ | <Entity>https://cz-online.aliveplatform.com/simplesaml/module.php/saml/sp/metadata.php/cz-online.aliveplatform.com</Entity> | ||
+ | <Entity>https://devnull.cesnet.cz/simplesamlphp</Entity> | ||
+ | <Entity>https://digi.law.muni.cz</Entity> | ||
+ | <Entity>https://digitool.is.cuni.cz/shibboleth</Entity> | ||
+ | <Entity>https://dspace.vsb.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://dspace2.zcu.cz/dspace</Entity> | ||
+ | <Entity>https://edu.ista.tacr.cz/ISTA</Entity> | ||
+ | <Entity>https://fedra.cesnet-ca.cz/</Entity> | ||
+ | <Entity>https://fedra.cesnet-ca.cz/force</Entity> | ||
+ | <Entity>https://fedra2.cesnet.cz/sp</Entity> | ||
+ | <Entity>https://filesender.cesnet.cz/saml/sp</Entity> | ||
+ | <Entity>https://gc3.cesnet.cz/shibboleth</Entity> | ||
+ | <Entity>https://index.bbmri.cz/shibboleth</Entity> | ||
+ | <Entity>https://iptel.cesnet.cz/shibboleth/cesnet-internal/sp</Entity> | ||
+ | <Entity>https://iptelix.cesnet.cz/</Entity> | ||
+ | <Entity>https://ista.tacr.cz/ISTA</Entity> | ||
+ | <Entity>https://itmulti.cz/simplesaml/module.php/saml/sp/metadata.php/portal4</Entity> | ||
+ | <Entity>https://journals.bmj.com/shibboleth</Entity> | ||
+ | <Entity>https://login.bbmri-eric.eu/proxy/</Entity> | ||
+ | <Entity>https://login.ceitec.cz/proxy/</Entity> | ||
+ | <Entity>https://login.elixir-czech.org/proxy/</Entity> | ||
+ | <Entity>https://login.ezproxy.is.cuni.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://login.ezproxy.uochb.cas.cz:2443/sp/shibboleth</Entity> | ||
+ | <Entity>https://login.ezproxy.vscht.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://mefanet-motol.cuni.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://meta.cesnet.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://mooc.cuni.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://nfsmon.ics.muni.cz/</Entity> | ||
+ | <Entity>https://odevzdej.cz/shibboleth/</Entity> | ||
+ | <Entity>https://onlineca.cesnet-ca.cz/</Entity> | ||
+ | <Entity>https://onlineca.cesnet-ca.cz/force</Entity> | ||
+ | <Entity>https://orca.ruk.cuni.cz/shibboleth</Entity> | ||
+ | <Entity>https://pentest.cesnet.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://portal.lf3.cuni.cz/shibboleth/sp</Entity> | ||
+ | <Entity>https://postudium.cz/auth/saml2/sp/metadata.php</Entity> | ||
+ | <Entity>https://proxy.lifescienceid.org/metadata/backend.xml</Entity> | ||
+ | <Entity>https://repozitar.cz/shibboleth/</Entity> | ||
+ | <Entity>https://saint.cesnet.cz/shibboleth</Entity> | ||
+ | <Entity>https://seth.ics.muni.cz/shibboleth</Entity> | ||
+ | <Entity>https://shib-test.cup.cam.ac.uk/shibboleth-sp</Entity> | ||
+ | <Entity>https://shibmon.eduid.cz/shibboleth</Entity> | ||
+ | <Entity>https://sip.cesnet.cz/sp/shibboleth</Entity> | ||
+ | <Entity>https://sip.cesnet.cz/sp/shibboleth/cesnet</Entity> | ||
+ | <Entity>https://softweco.cz/shibboleth-sp</Entity> | ||
+ | <Entity>https://su-dev.fit.vutbr.cz/kis</Entity> | ||
+ | <Entity>https://su-int.fit.vutbr.cz/kis</Entity> | ||
+ | <Entity>https://tcs-dev.cesnet.cz/simplesaml/</Entity> | ||
+ | <Entity>https://tcs.cesnet.cz/simplesaml/</Entity> | ||
+ | <Entity>https://teleinform.cz/simplesaml/module.php/saml/sp/metadata.php/portal1</Entity> | ||
+ | <Entity>https://telekomunikace-tit.cz/simplesaml/module.php/saml/sp/metadata.php/portal3</Entity> | ||
+ | <Entity>https://test.ista.tacr.cz/ISTA</Entity> | ||
+ | <Entity>https://thalamoss-data.ics.muni.cz/shibboleth</Entity> | ||
+ | <Entity>https://theses.cz/shibboleth/</Entity> | ||
+ | <Entity>https://vnweb.hwwilsonweb.com/shibboleth</Entity> | ||
+ | <Entity>https://vut-vsb.cz/simplesaml/module.php/saml/sp/metadata.php/portal2</Entity> | ||
+ | <Entity>https://vvvd.vsb.cz/shibboleth</Entity> | ||
+ | <Entity>https://wikisofia.cz/shibboleth</Entity> | ||
+ | <Entity>https://www.bookport.cz/</Entity> | ||
+ | <Entity>https://www.cistbrno.cz/</Entity> | ||
+ | <Entity>https://www.citacepro.com/simplesaml/module.php/saml/sp/metadata.php/eduid-sp</Entity> | ||
+ | <Entity>https://www.eunis.cz/simplesamlphp/module.php/saml/sp/metadata.php/eunis</Entity> | ||
+ | <Entity>https://www.jib.cz/shibboleth</Entity> | ||
+ | <Entity>https://www.levna-knihovna.cz/simplesamlphp/module.php/saml/sp/metadata.php/default-sp</Entity> | ||
+ | <Entity>https://www.liberouter.org/simplesamlphp/module.php/saml/sp/metadata.php/liberouter</Entity> | ||
+ | <Entity>https://www.mecenat.eu/sp</Entity> | ||
+ | <Entity>https://www.vutbr.cz/SSO/saml2/sp</Entity> | ||
+ | <Entity>https://xploreuat.ieee.org/shibboleth-sp</Entity> | ||
</MetadataFilter> | </MetadataFilter> | ||
+ | |||
</MetadataProvider> | </MetadataProvider> | ||
Řádek 175: | Řádek 355: | ||
backingFile="%{idp.home}/metadata/edugain.xml" | backingFile="%{idp.home}/metadata/edugain.xml" | ||
metadataURL="https://metadata.eduid.cz/entities/edugain+sp" | metadataURL="https://metadata.eduid.cz/entities/edugain+sp" | ||
- | maxRefreshDelay="PT15M"> | + | maxRefreshDelay="PT30M"> |
<MetadataFilter | <MetadataFilter | ||
xsi:type="SignatureValidation" | xsi:type="SignatureValidation" | ||
requireSignedRoot="true" | requireSignedRoot="true" | ||
certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | certificateFile="%{idp.home}/credentials/metadata.eduid.cz.crt.pem" /> | ||
- | <MetadataFilter xsi:type="EntityRoleWhiteList"> | + | |
- | <RetainedRole>md:SPSSODescriptor</RetainedRole> | + | <MetadataFilter |
+ | xsi:type="RequiredValidUntil" | ||
+ | maxValidityInterval="P30D" /> | ||
+ | |||
+ | <MetadataFilter | ||
+ | xsi:type="Algorithm"> | ||
+ | |||
+ | <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/> | ||
+ | <ConditionRef>shibboleth.Conditions.TRUE</ConditionRef> | ||
</MetadataFilter> | </MetadataFilter> | ||
+ | |||
</MetadataProvider> | </MetadataProvider> | ||
</code> | </code> | ||
- | //Blok kódu výše, tedy element <MetadataProvider> se všemi atributy, je nutné umístit do elementu <MetadataProvider> v konfiguračním souboru ''metadata-providers.xml''! Sice to působí podivně, ale bez toho nebude XML dokument validní a konfigurace nebude fungovat.// | + | </WRAP> |
- | + | ||
- | Pokud by vás zajímal význam atributů v elementu ''<MetadataProvider>'', naleznete vše [[https://wiki.shibboleth.net/confluence/display/IDP30/FileBackedHTTPMetadataProvider|v oficiální dokumentaci]]. Vše okolo ''<MetadataFilter>'' elementu naleznete také [[https://wiki.shibboleth.net/confluence/display/IDP30/MetadataFilterPlugin|v oficiální dokumentaci]]. | + | |
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áhněte ho a uložte do adresáře ''/opt/shibboleth-idp/credentials''. | 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áhněte ho a uložte do adresáře ''/opt/shibboleth-idp/credentials''. | ||
Řádek 202: | Řádek 391: | ||
Chcete-li si konfigurační soubor ''/opt/shibboleth-idp/conf/attribute-resolver.xml'' nakonfigurovat od začátku a naprosto sami, využijte k tomu soubor ''/opt/shibboleth-idp/conf/attribute-resolver-ldap.xml'', který v sobě zahrnuje i konektor do LDAP serveru. | Chcete-li si konfigurační soubor ''/opt/shibboleth-idp/conf/attribute-resolver.xml'' nakonfigurovat od začátku a naprosto sami, využijte k tomu soubor ''/opt/shibboleth-idp/conf/attribute-resolver-ldap.xml'', který v sobě zahrnuje i konektor do LDAP serveru. | ||
- | Doporučuji však usnadnit si práci a 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-filter.xml'' upravte. | + | Doporučuji však usnadnit si práci a 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'' upravte. |
+ | <WRAP alert> | ||
**Návod v následujících krocích předpokládá, že jste použili připravenou šablonu!** | **Návod v následujících krocích předpokládá, že jste 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!** | ||
+ | </WRAP> | ||
<code bash> | <code bash> | ||
Řádek 212: | Řádek 407: | ||
</code> | </code> | ||
- | Potřebujete-li si definovat své atributy, pak bližší informace ke konfiguraci naleznete [[https://wiki.shibboleth.net/confluence/display/IDP30/AttributeResolverConfiguration|v oficiální dokumentaci]]. | + | Potřebujete-li si definovat své atributy, pak bližší informace ke konfiguraci naleznete [[https://wiki.shibboleth.net/confluence/display/IDP4/AttributeResolverConfiguration|v oficiální dokumentaci]]. |
==== attribute-filter.xml ==== | ==== attribute-filter.xml ==== | ||
Řádek 218: | Řádek 413: | ||
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''. | 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/_media/cs/tech/idp/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]]. | 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]]. | ||
Řádek 227: | Řádek 422: | ||
</code> | </code> | ||
- | Chcete-li si nastavit uvolňování atributů dle svého, tak bližší informace naleznete [[https://wiki.shibboleth.net/confluence/display/IDP30/AttributeFilterConfiguration|v oficiální dokumentaci]]. | + | Chcete-li si nastavit uvolňování atributů dle svého, tak bližší informace naleznete [[https://wiki.shibboleth.net/confluence/display/IDP4/AttributeFilterConfiguration|v oficiální dokumentaci]]. |
==== idp-metadata.xml ==== | ==== idp-metadata.xml ==== | ||
Řádek 235: | Řádek 430: | ||
<code bash> | <code bash> | ||
# Otevřeme konfigurační soubor idp-metadata.xml | # Otevřeme konfigurační soubor idp-metadata.xml | ||
- | vi /opt/shibboleth-idp/metadata/idp-metadata.xml | + | vim /opt/shibboleth-idp/metadata/idp-metadata.xml |
</code> | </code> | ||
Řádek 316: | Řádek 511: | ||
<code bash> | <code bash> | ||
# Úpravy v konfiguračním souboru global.xml | # Úpravy v konfiguračním souboru global.xml | ||
- | vi /opt/shibboleth-idp/conf/global.xml | + | vim /opt/shibboleth-idp/conf/global.xml |
</code> | </code> | ||
Řádek 324: | Řádek 519: | ||
<bean id="shibboleth.MySQLDataSource" | <bean id="shibboleth.MySQLDataSource" | ||
class="org.apache.commons.dbcp2.BasicDataSource" | class="org.apache.commons.dbcp2.BasicDataSource" | ||
- | p:driverClassName="com.mysql.jdbc.Driver" | + | p:driverClassName="org.mariadb.jdbc.Driver" |
p:url="jdbc:mysql://localhost:3306/shibboleth" | p:url="jdbc:mysql://localhost:3306/shibboleth" | ||
p:username="shibboleth" | p:username="shibboleth" | ||
Řádek 348: | Řádek 543: | ||
p:generateDdl="true" | p:generateDdl="true" | ||
p:database="MYSQL" | p:database="MYSQL" | ||
- | p:databasePlatform="org.hibernate.dialect.MySQL5Dialect" /> | + | p:databasePlatform="org.hibernate.dialect.MariaDBDialect" /> |
</code> | </code> | ||
Řádek 357: | Řádek 552: | ||
<code bash> | <code bash> | ||
# Úpravy v konfiguračním souboru saml-nameid.properties | # Úpravy v konfiguračním souboru saml-nameid.properties | ||
- | vi /opt/shibboleth-idp/conf/saml-nameid.properties | + | vim /opt/shibboleth-idp/conf/saml-nameid.properties |
</code> | </code> | ||
- | <code bash> | + | Zde definujeme odkazy na výše definované "<bean>y", dále atribut, který se bude pro výpočet persistentního identifikátoru používat (''uid''). |
- | # Vygenerování soli | + | |
- | openssl rand -base64 36 | + | |
- | </code> | + | |
- | + | ||
- | Zde definujeme odkazy na výše definované "<bean>y", dále atribut, který se bude pro výpočet persistentního identifikátoru používat (''uid'') a sůl (''salt'') použitou pro výpočet (tu jsme si již vygenerovali výše). | + | |
<code ini> | <code ini> | ||
idp.persistentId.sourceAttribute = uid | idp.persistentId.sourceAttribute = uid | ||
- | idp.persistentId.salt = ___SALT___ | + | # Nové IdP (BASE32) |
- | # Nové IdP | + | |
idp.persistentId.encoding = BASE32 | idp.persistentId.encoding = BASE32 | ||
- | # Migrované IdP | + | # Migrované IdP (BASE64) |
#idp.persistentId.encoding = BASE64 | #idp.persistentId.encoding = BASE64 | ||
idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator | idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator | ||
Řádek 384: | Řádek 573: | ||
<code bash> | <code bash> | ||
# Úpravy v konfiguračním souboru saml-nameid.xml | # Úpravy v konfiguračním souboru saml-nameid.xml | ||
- | vi /opt/shibboleth-idp/conf/saml-nameid.xml | + | vim /opt/shibboleth-idp/conf/saml-nameid.xml |
</code> | </code> | ||
Řádek 399: | Řádek 588: | ||
<code bash> | <code bash> | ||
# Úpravy v konfiguračním souboru subject-c14n.xml | # Úpravy v konfiguračním souboru subject-c14n.xml | ||
- | vi /opt/shibboleth-idp/conf/c14n/subject-c14n.xml | + | vim /opt/shibboleth-idp/conf/c14n/subject-c14n.xml |
</code> | </code> | ||
Řádek 456: | Řádek 645: | ||
### Operating Environment Information | ### Operating Environment Information | ||
operating_system: Linux | operating_system: Linux | ||
- | operating_system_version: 4.19.0-6-amd64 | + | operating_system_version: 4.19.0-8-amd64 |
operating_system_architecture: amd64 | operating_system_architecture: amd64 | ||
- | jdk_version: 11.0.5 | + | jdk_version: 11.0.6 |
available_cores: 1 | available_cores: 1 | ||
- | used_memory: 391 MB | + | used_memory: 260 MB |
maximum_memory: 1500 MB | maximum_memory: 1500 MB | ||
### Identity Provider Information | ### Identity Provider Information | ||
- | idp_version: 3.4.6 | + | idp_version: 4.0.0 |
- | start_time: 2019-12-13T15:34:26+01:00 | + | start_time: 2020-03-27T11:58:27.546Z |
- | current_time: 2019-12-13T15:34:28+01:00 | + | current_time: 2020-03-27T11:58:29.415454Z |
- | uptime: 2512 ms | + | uptime: 1869 ms |
service: shibboleth.LoggingService | service: shibboleth.LoggingService | ||
- | last successful reload attempt: 2019-12-13T14:33:26Z | + | last successful reload attempt: 2020-03-27T11:48:53.362422Z |
- | last reload attempt: 2019-12-13T14:33:26Z | + | last reload attempt: 2020-03-27T11:48:53.362422Z |
- | service: shibboleth.ReloadableAccessControlService | + | service: shibboleth.AttributeFilterService |
- | last successful reload attempt: 2019-12-13T14:33:50Z | + | last successful reload attempt: 2020-03-27T11:48:57.202556Z |
- | last reload attempt: 2019-12-13T14:33:50Z | + | last reload attempt: 2020-03-27T11:48:57.202556Z |
- | service: shibboleth.MetadataResolverService | + | service: shibboleth.AttributeResolverService |
- | last successful reload attempt: 2019-12-13T14:33:40Z | + | last successful reload attempt: 2020-03-27T11:48:57.531585Z |
- | last reload attempt: 2019-12-13T14:33:40Z | + | last reload attempt: 2020-03-27T11:48:57.531585Z |
- | metadata source: eduidcz | + | No Data Connector has ever failed |
- | last refresh attempt: 2019-12-13T14:33:40Z | + | |
- | last successful refresh: 2019-12-13T14:33:40Z | + | |
- | last update: 2019-12-13T14:33:40Z | + | |
- | root validUntil: 2020-01-12T14:01:02Z | + | |
- | metadata source: edugain | + | service: shibboleth.AttributeRegistryService |
- | last refresh attempt: 2019-12-13T14:33:42Z | + | last successful reload attempt: 2020-03-27T11:49:00.195848Z |
- | last successful refresh: 2019-12-13T14:33:42Z | + | last reload attempt: 2020-03-27T11:49:00.195848Z |
- | last update: 2019-12-13T14:33:42Z | + | |
- | root validUntil: 2020-01-09T15:02:02Z | + | service: shibboleth.NameIdentifierGenerationService |
+ | last successful reload attempt: 2020-03-27T11:49:00.673174Z | ||
+ | last reload attempt: 2020-03-27T11:49:00.673174Z | ||
service: shibboleth.RelyingPartyResolverService | service: shibboleth.RelyingPartyResolverService | ||
- | last successful reload attempt: 2019-12-13T14:33:39Z | + | last successful reload attempt: 2020-03-27T11:49:00.877735Z |
- | last reload attempt: 2019-12-13T14:33:39Z | + | last reload attempt: 2020-03-27T11:49:00.877735Z |
- | service: shibboleth.NameIdentifierGenerationService | + | service: shibboleth.MetadataResolverService |
- | last successful reload attempt: 2019-12-13T14:33:39Z | + | last successful reload attempt: 2020-03-27T11:49:01.654211Z |
- | last reload attempt: 2019-12-13T14:33:39Z | + | last reload attempt: 2020-03-27T11:49:01.654211Z |
- | service: shibboleth.AttributeResolverService | + | metadata source: ShibbolethMetadata |
- | last successful reload attempt: 2019-12-13T14:33:30Z | + | last refresh attempt: 2020-03-27T11:49:16.181118Z |
- | last reload attempt: 2019-12-13T14:33:30Z | + | last successful refresh: 2020-03-27T11:49:16.181118Z |
+ | last update: 2020-03-27T11:49:16.181118Z | ||
- | DataConnector staticAttributes: has never failed | + | metadata source: eduidcz |
+ | last refresh attempt: 2020-03-27T11:49:08.331577Z | ||
+ | last successful refresh: 2020-03-27T11:49:08.331577Z | ||
+ | last update: 2020-03-27T11:49:08.331577Z | ||
+ | root validUntil: 2020-04-22T23:53:01Z | ||
- | DataConnector myLDAP: has never failed | + | metadata source: edugain |
+ | last refresh attempt: 2020-03-27T11:49:16.181118Z | ||
+ | last successful refresh: 2020-03-27T11:49:16.181118Z | ||
+ | last update: 2020-03-27T11:49:16.181118Z | ||
+ | root validUntil: 2020-04-23T12:03:02Z | ||
- | DataConnector myStoredId: has never failed | + | service: shibboleth.ReloadableAccessControlService |
+ | last successful reload attempt: 2020-03-27T11:49:11.405929Z | ||
+ | last reload attempt: 2020-03-27T11:49:11.405929Z | ||
- | service: shibboleth.AttributeFilterService | + | service: shibboleth.ReloadableCASServiceRegistry |
- | last successful reload attempt: 2019-12-13T14:33:29Z | + | last successful reload attempt: 2020-03-27T11:49:11.484428Z |
- | last reload attempt: 2019-12-13T14:33:29Z | + | last reload attempt: 2020-03-27T11:49:11.484428Z |
+ | |||
+ | service: shibboleth.ManagedBeanService | ||
+ | last successful reload attempt: 2020-03-27T11:49:11.554208Z | ||
+ | last reload attempt: 2020-03-27T11:49:11.554208Z | ||
</code> | </code> | ||
===== Tipy ===== | ===== Tipy ===== | ||
- | Na stránce [[cs:tech:idp:shibboleth:tips]] naleznete některé zajímavé konfigurační tipy, které by vás mohly zajímat, proto se na stránku určitě podívejte. | + | 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 ===== | ===== Vzhled ===== |