cs:tech:idp:shibboleth:new

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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:new [2020/03/27 11:47]
jan.oppolzer@cesnet.cz [attribute-resolver.xml]
cs:tech:idp:shibboleth:new [2022/06/14 13:20]
Jan Oppolzer created
Řádek 1: Řádek 1:
-<WRAP center alert 100%> +Upravená verze stránky [[:​cs:​tech:​idp:​shibboleth]].
-**Tento návod je určený pro //​Shibboleth IdP V4.0.0// a je teprve v přípravě,​ takže by ho nikdo neměl zatím používat a už vůbec na produkčním serveru!** +
-</​WRAP>​ +
- +
-====== 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]].** +
- +
----- +
- +
-===== Instalace ===== +
- +
-Zdrojové kódy stáhneme [[https://​shibboleth.net/​downloads/​identity-provider/​4.0.0/​|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> +
-# Stažení zdrojového kódu Shibboleth IdP +
-wget -P /opt \ +
-     ​https://​shibboleth.net/​downloads/​identity-provider/​4.0.0/​shibboleth-identity-provider-4.0.0.tar.gz \ +
-     ​https://​shibboleth.net/​downloads/​identity-provider/​4.0.0/​shibboleth-identity-provider-4.0.0.tar.gz.asc \ +
-     ​https://​shibboleth.net/​downloads/​identity-provider/​4.0.0/​shibboleth-identity-provider-4.0.0.tar.gz.sha256 +
- +
-# Přepnutí do adresáře /opt +
-cd /opt +
- +
-# Kontrola SHA256 otisku +
-sha256sum -c shibboleth-identity-provider-4.0.0.tar.gz.sha256 +
- +
-# Kontrola GPG podpisu +
-# Nejprve importujeme klíč 07CEEB8B +
-gpg --keyserver hkp://​keys.gnupg.net --search-keys 07CEEB8B +
-# Nyní můžeme provést samotnou kontrolu +
-gpg --verify shibboleth-identity-provider-4.0.0.tar.gz.asc +
-</​code>​ +
- +
-Nyní přistoupíme k samotné instalaci. +
- +
-<code bash> +
-# Instalace Shibboleth IdP +
-tar -xzf shibboleth-identity-provider-4.0.0.tar.gz +
-cd shibboleth-identity-provider-4.0.0/​ +
-./​bin/​install.sh +
-</​code>​ +
- +
-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ě),​ +
-  - 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, +
-  - zadáme scope organizace (pokud není vyplněn správně). +
- +
-Zde je vyobrazen průběh instalačního skriptu ''​install.sh''​. +
- +
-<code bash> +
-Buildfile: /​opt/​shibboleth-identity-provider-4.0.0/​bin/​build.xml +
- +
-install: +
-Source (Distribution) Directory (press <​enter>​ to accept default): ​[/​opt/​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: [idp.example.org] ? +
- +
-INFO [net.shibboleth.idp.installer.V4Install:​549] - Creating idp-signing,​ CN = idp.example.org URI = https://​idp.example.org/​idp/​shibboleth,​ keySize=3072 +
-INFO [net.shibboleth.idp.installer.V4Install:​549] - Creating idp-encryption,​ CN = idp.example.org URI = https://​idp.example.org/​idp/​shibboleth,​ keySize=3072 +
-Backchannel PKCS12 Password: +
-Re-enter password: +
-INFO [net.shibboleth.idp.installer.V4Install:​592] - Creating backchannel keystore, CN = idp.example.org URI = https://​idp.example.org/​idp/​shibboleth,​ keySize=3072 +
-Cookie Encryption Key Password: +
-Re-enter password: +
-INFO [net.shibboleth.idp.installer.V4Install:​633] - Creating backchannel keystore, CN = idp.example.org URI = https://​idp.example.org/​idp/​shibboleth,​ keySize=3072 +
-INFO [net.shibboleth.utilities.java.support.security.BasicKeystoreKeyStrategyTool:​166] - No existing versioning property, initializing... +
-SAML EntityID: [https://​idp.example.org/​idp/​shibboleth] ? +
- +
-Attribute Scope: [example.org] ? +
- +
-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: 37 seconds +
-</​code>​ +
- +
-Tím je instalace hotová a zbývá tedy IdP ještě nakonfigurovat. +
- +
-===== Konfigurace ===== +
- +
-Konfigurace může být dost různorodá a vše závisí na tom, zda-li chcete IdP používat pouze pro přístup ke službám federace anebo se rozhodnete používat ho i pro přístup k vašim interním službám. +
- +
-Zde uvedená ukázka konfigurace slouží jako naprostý základ. +
- +
-==== 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/​IDP4/​SecurityConfiguration#​SecurityConfiguration-Properties|v oficiální dokumentaci]]. +
- +
-Dále doplníme podporu pro ukládání souhlasů s vydáváním uživatelských informací (atributů) do databáze. +
- +
-<code bash> +
-# Otevřeme konfigurační soubor idp.properties +
-vim /​opt/​shibboleth-idp/​conf/​idp.properties +
-</​code>​ +
- +
-Nastavíme ''​idp.cookie.secure''​ a ''​idp.cookie.httpOnly''​ na hodnotu ''​true''​ a ''​idp.consent.StorageService''​ na hodnotu ''​shibboleth.JPAStorageService'':​ +
- +
-<code ini> +
-#​idp.cookie.secure = true +
-#​idp.cookie.httpOnly = true +
-idp.consent.StorageService = shibboleth.JPAStorageService +
-</​code>​ +
- +
-==== ldap.properties ==== +
- +
-V souboru ''/​opt/​shibboleth-idp/​conf/​ldap.properties''​ se nastavuje konektor do LDAP serveru, pomocí něhož budeme získávat uživatelské atributy. +
- +
-<code bash> +
-# Otevřeme konfigurační soubor ldap.properties +
-vim /​opt/​shibboleth-idp/​conf/​ldap.properties +
-</​code>​ +
- +
-Důležité jsou především následující volby: +
- +
-<code ini> +
-idp.authn.LDAP.authenticator ​    = bindSearchAuthenticator +
-idp.authn.LDAP.ldapURL ​          = ldaps://​ldap.example.org:​636 +
-idp.authn.LDAP.useStartTLS ​      = false +
-idp.authn.LDAP.useSSL ​           = true +
-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 +
-idp.ldaptive.provider ​           = org.ldaptive.provider.unboundid.UnboundIDProvider +
-</​code>​ +
- +
-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ě. Pokud však chcete, 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 (<​nowiki>​ldaps://</​nowiki>​) na stadardním portu ''​636''​. +
- +
-//Poznámka k ldapURL:// 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í 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''​ 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]]. +
- +
-==== secrets.properties ==== +
- +
-FIXME +
- +
-V souboru ''/​opt/​shibboleth-idp/​credentials/​secrets.properties'',​ který nově existuje v Shibboleth IdP od verze V4, nastavíme heslo k LDAP serveru. +
- +
-<code bash> +
-# Vygenerování soli +
-openssl rand -base64 36 +
-</​code>​ +
- +
-<code bash> +
-# 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. +
- +
-<code ini> +
-idp.authn.LDAP.bindDNCredential = nejakeheslo +
- +
-idp.persistentId.salt = ___SALT___ +
-</​code>​ +
- +
-==== 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ží. +
- +
-<code bash> +
-# Otevřeme konfigurační soubor metadata-providers.xml +
-vim /​opt/​shibboleth-idp/​conf/​metadata-providers.xml +
-</​code>​ +
- +
-<code xml> +
-<​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"​ /> +
- +
-</​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]]. +
- +
-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''​. +
- +
-<code bash> +
-# 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 +
-</​code>​ +
- +
-==== attribute-resolver.xml ==== +
- +
-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-v4/​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!** +
- +
-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ěkolik služeb bez persistentního NameID nebude fungovat!** +
-</​WRAP>​ +
- +
-<code bash> +
-# Stažení attribute-resolver.xml +
-wget -O /​opt/​shibboleth-idp/​conf/​attribute-resolver.xml \ +
-    https://​www.eduid.cz/​shibboleth-idp-v4/​attribute-resolver.xml +
-</​code>​ +
- +
-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 ==== +
- +
-FIXME: **Důkladně otestovat šablonu pro V4!** +
- +
-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-v4/​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]]. +
- +
-<code bash> +
-wget -O /​opt/​shibboleth-idp/​conf/​attribute-filter.xml \ +
-    https://​www.eduid.cz/​shibboleth-idp-v4/​attribute-filter.xml +
-</​code>​ +
- +
-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 ==== +
- +
-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 ''<​UIInfo>'',​ který se zapisuje do "​rozšíření"​ (element ''<​Extensions>''​),​ např. za ''<​Scope>'':​ +
- +
-<code bash> +
-# Otevřeme konfigurační soubor idp-metadata.xml +
-vi /​opt/​shibboleth-idp/​metadata/​idp-metadata.xml +
-</​code>​ +
- +
-<code xml> +
-<​Extensions>​ +
-    <​shibmd:​Scope regexp="​false">​example.org</​shibmd:​Scope>​ +
-    <​mdui:​UIInfo>​ +
-        <​mdui:​DisplayName xml:​lang="​en">​EXAMPLE</​mdui:​DisplayName>​ +
-        <​mdui:​DisplayName xml:​lang="​cs">​EXAMPLE</​mdui:​DisplayName>​ +
-        <​mdui:​Description xml:​lang="​en">​EXAMPLE'​s Identity Provider.</​mdui:​Description>​ +
-        <​mdui:​Description xml:​lang="​cs">​Poskytovatel identity pro EXAMPLE.</​mdui:​Description>​ +
-        <​mdui:​InformationURL xml:​lang="​en">​http://​www.example.org/​en/</​mdui:​InformationURL>​ +
-        <​mdui:​InformationURL xml:​lang="​cs">​http://​www.example.org/​cs/</​mdui:​InformationURL>​ +
-        <​mdui:​Logo height="​200"​ width="​200">​https://​img.example.org/​logo-200.gif</​mdui:​Logo>​ +
-    </​mdui:​UIInfo>​ +
-</​Extensions>​ +
-</​code>​ +
- +
-Dále je nutno doplnit název organizace v elementu ''<​Organization>''​ (patří do elementu ''<​EntityDescriptor>''​ za element ''</​AttributeAuthorityDescriptor>''​):​ +
- +
-<code xml> +
-<​Organization>​ +
-    <​OrganizationName xml:​lang="​en">​EXAMPLE,​ a. l. e.</​OrganizationName>​ +
-    <​OrganizationName xml:​lang="​cs">​EXAMPLE,​ z. s. p. o.</​OrganizationName>​ +
-    <​OrganizationDisplayName xml:​lang="​en">​EXAMPLE</​OrganizationDisplayName>​ +
-    <​OrganizationDisplayName xml:​lang="​cs">​EXAMPLE</​OrganizationDisplayName>​ +
-    <​OrganizationURL xml:​lang="​en">​http://​www.example.org/​en/</​OrganizationURL>​ +
-    <​OrganizationURL xml:​lang="​cs">​http://​www.example.org/​cs/</​OrganizationURL>​ +
-</​Organization>​ +
-</​code>​ +
- +
-Chybět nesmí ani kontaktní osoby v elementu ''<​ContactPerson>''​ (opět v elementu ''<​EntityDescriptor>''​ za element ''<​Organization>''​):​ +
- +
-<code xml> +
-<​ContactPerson contactType="​technical">​ +
-    <​GivenName>​Kryštof</​GivenName>​ +
-    <​SurName>​Šáteček</​SurName>​ +
-    <​EmailAddress>​mailto:​krystof.satecek@example.org</​EmailAddress>​ +
-</​ContactPerson>​ +
-</​code>​ +
- +
-V metadatech ještě doplníme podporu pro persistentní identifikátor. +
- +
-Přidáme do elementu ''<​IDPSSODescriptor>''​ následující řádek těsně před ukončovací element ''</​IDPSSODescriptor>''​. +
- +
-<code xml> +
-<​NameIDFormat>​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent</​NameIDFormat>​ +
-</​code>​ +
- +
-=== eduGAIN === +
- +
-Kromě služeb ve federaci [[cs:​index|eduID.cz]] je možné zpřístupnit uživatelům i služby mezinárodní federace [[http://​edugain.org|eduGAIN]]. K tomu je potřeba, aby bylo IdP exportováno do metadat eduGAINu, což se zajistí následující úpravou souboru ''/​opt/​shibboleth-idp/​metadata/​idp-metadata.xml''​. +
- +
-**Pozor!** Následující kód je třeba umístit přesně tímto způsobem! Nejprve je element ''<​EntityDescriptor>'',​ pak následuje element ''<​Extensions>''​ a v něm jsou elementy ''<​RepublishRequest>''​ a ''<​RepublishTarget>''​! __Nepatří tedy do elementu ''<​Extensions>''​ umístěného v elementu ''<​IDPSSODescriptor>''​!__ +
- +
-<code xml> +
-<​EntityDescriptor>​ +
- +
-    <​Extensions>​ +
- +
-        <!-- eduGAIN --> +
-        <​eduidmd:​RepublishRequest xmlns:​eduidmd="​http://​eduid.cz/​schema/​metadata/​1.0">​ +
-            <​eduidmd:​RepublishTarget>​http://​edugain.org/</​eduidmd:​RepublishTarget>​ +
-        </​eduidmd:​RepublishRequest>​ +
- +
-        <​!-- ​                                     --> +
-        <!-- Zde následují element Scope a UIInfo --> +
-        <​!-- ​                                     --> +
- +
-    </​Extensions>​ +
- +
-</​EntityDescriptor>​ +
-</​code>​ +
- +
-==== global.xml ==== +
- +
-Nyní je potřeba v souboru ''​global.xml''​ definovat některé "<​bean>​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). +
- +
- +
-<code bash> +
-# Úpravy v konfiguračním souboru global.xml +
-vi /​opt/​shibboleth-idp/​conf/​global.xml +
-</​code>​ +
- +
-V prvním bloku kódu nahradíme ''​___SILNE_HESLO___''​ heslem pro uživatele //​shibboleth//​ k databázi //​shibboleth//​. +
- +
-<code xml> +
-<bean id="​shibboleth.MySQLDataSource"​ +
-    class="​org.apache.commons.dbcp2.BasicDataSource"​ +
-    p:​driverClassName="​org.mariadb.jdbc.Driver"​ +
-    p:​url="​jdbc:​mysql://​localhost:​3306/​shibboleth"​ +
-    p:​username="​shibboleth"​ +
-    p:​password="​___SILNE_HESLO___"​ /> +
- +
-<bean id="​shibboleth.JPAStorageService"​ +
-    class="​org.opensaml.storage.impl.JPAStorageService"​ +
-    p:​cleanupInterval="​%{idp.storage.cleanupInterval:​PT10M}"​ +
-    c:​factory-ref="​shibboleth.JPAStorageService.entityManagerFactory"​ /> +
- +
-<bean id="​shibboleth.JPAStorageService.entityManagerFactory"​ +
-    class="​org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">​ +
-    <​property name="​packagesToScan"​ value="​org.opensaml.storage.impl"/>​ +
-    <​property name="​dataSource"​ ref="​shibboleth.MySQLDataSource"/>​ +
-    <​property name="​jpaVendorAdapter"​ ref="​shibboleth.JPAStorageService.JPAVendorAdapter"/>​ +
-    <​property name="​jpaDialect">​ +
-        <bean class="​org.springframework.orm.jpa.vendor.HibernateJpaDialect"​ /> +
-    </​property>​ +
-</​bean>​ +
- +
-<bean id="​shibboleth.JPAStorageService.JPAVendorAdapter"​ +
-    class="​org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"​ +
-    p:​generateDdl="​true"​ +
-    p:​database="​MYSQL"​ +
-    p:​databasePlatform="​org.hibernate.dialect.MySQL5Dialect"​ /> +
-</​code>​ +
- +
-==== saml-nameid.properties ==== +
- +
-Dále musíme provést úpravy v konfiguračním souboru ''​saml-nameid.properties''​. +
- +
-<code bash> +
-# Úpravy v konfiguračním souboru saml-nameid.properties +
-vi /​opt/​shibboleth-idp/​conf/​saml-nameid.properties +
-</​code>​ +
- +
-FIXME +
- +
-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> +
-idp.persistentId.sourceAttribute = uid +
-# Nové IdP +
-idp.persistentId.encoding = BASE32 +
-# Migrované IdP +
-#​idp.persistentId.encoding = BASE64 +
-idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator +
-idp.persistentId.dataSource = shibboleth.MySQLDataSource +
-</​code>​ +
- +
-==== saml-nameid.xml ==== +
- +
-Podpora persistentních identifikátorů je ještě potřeba zapnout v konfiguračním souboru ''​saml-nameid.xml''​. +
- +
-<code bash> +
-# Úpravy v konfiguračním souboru saml-nameid.xml +
-vi /​opt/​shibboleth-idp/​conf/​saml-nameid.xml +
-</​code>​ +
- +
-Stačí odkomentovat následující řádek, který je ve výchozí konfiguraci po instalaci IdP zakomentovaný. +
- +
-<code xml> +
-<ref bean="​shibboleth.SAML2PersistentGenerator"​ /> +
-</​code>​ +
- +
-==== subject-c14n.xml ==== +
- +
-Teď ještě zbývá úprava v souboru ''​subject-c14n.xml''​. +
- +
-<code bash> +
-# Úpravy v konfiguračním souboru subject-c14n.xml +
-vi /​opt/​shibboleth-idp/​conf/​c14n/​subject-c14n.xml +
-</​code>​ +
- +
-Odkomentujeme tedy následující řádek: +
- +
-<code xml> +
-<ref bean="​c14n/​SAML2Persistent"​ /> +
-</​code>​ +
- +
-===== Spuštění ===== +
- +
-Nyní, když máme IdP nakonfigurováno,​ opravíme práva v adresáři ''/​opt/​shibboleth-idp'':​ +
- +
-<code bash> +
-# Ú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/​* +
-</​code>​ +
- +
-V systemd musíme Jetty povolit přístup pro zápis do adresářů s logy a metadaty. +
- +
-<code bash> +
-# Úprava služby jetty9 v systemd +
-systemctl edit jetty9 +
-</​code>​ +
- +
-Nastavení práv pro záspis do adresářů ''/​opt/​shibboleth-idp/​{logs,​metadata}'':​ +
- +
-<code ini> +
-[Service] +
-ReadWritePaths=/​opt/​shibboleth-idp/​logs/​ +
-ReadWritePaths=/​opt/​shibboleth-idp/​metadata/​ +
-</​code>​ +
- +
-Zbývá jen znovu načíst konfiguraci pro službu Jetty a tu následně restartovat:​ +
- +
-<code bash> +
-# Restart Jetty +
-systemctl daemon-reload +
-systemctl restart jetty9 +
-</​code>​ +
- +
-Nyní, jakmile Jetty po chvilce nastartuje, můžeme vyzkoušet, zda IdP v pořádku běží: +
- +
-<code bash> +
-# Zobrazení stavu IdP +
-/​opt/​shibboleth-idp/​bin/​status.sh +
-</​code>​ +
- +
-Pokud IdP korektně běží, uvidíte následující:​ +
- +
-<​code>​ +
-### Operating Environment Information +
-operating_system:​ Linux +
-operating_system_version:​ 4.19.0-6-amd64 +
-operating_system_architecture:​ amd64 +
-jdk_version:​ 11.0.5 +
-available_cores:​ 1 +
-used_memory:​ 391 MB +
-maximum_memory:​ 1500 MB +
- +
-### Identity Provider Information +
-idp_version:​ 3.4.6 +
-start_time: 2019-12-13T15:​34:​26+01:​00 +
-current_time:​ 2019-12-13T15:​34:​28+01:​00 +
-uptime: 2512 ms +
- +
-service: shibboleth.LoggingService +
-last successful reload attempt: 2019-12-13T14:​33:​26Z +
-last reload attempt: 2019-12-13T14:​33:​26Z +
- +
-service: shibboleth.ReloadableAccessControlService +
-last successful reload attempt: 2019-12-13T14:​33:​50Z +
-last reload attempt: 2019-12-13T14:​33:​50Z +
- +
-service: shibboleth.MetadataResolverService +
-last successful reload attempt: 2019-12-13T14:​33:​40Z +
-last reload attempt: 2019-12-13T14:​33:​40Z +
- +
- metadata source: eduidcz +
- 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 +
- last refresh attempt: 2019-12-13T14:​33:​42Z +
- last successful refresh: 2019-12-13T14:​33:​42Z +
- last update: 2019-12-13T14:​33:​42Z +
- root validUntil: 2020-01-09T15:​02:​02Z +
- +
-service: shibboleth.RelyingPartyResolverService +
-last successful reload attempt: 2019-12-13T14:​33:​39Z +
-last reload attempt: 2019-12-13T14:​33:​39Z +
- +
-service: shibboleth.NameIdentifierGenerationService +
-last successful reload attempt: 2019-12-13T14:​33:​39Z +
-last reload attempt: 2019-12-13T14:​33:​39Z +
- +
-service: shibboleth.AttributeResolverService +
-last successful reload attempt: 2019-12-13T14:​33:​30Z +
-last reload attempt: 2019-12-13T14:​33:​30Z +
- +
- DataConnector staticAttributes:​ has never failed +
- +
- DataConnector myLDAP: has never failed +
- +
- DataConnector myStoredId: has never failed +
- +
-service: shibboleth.AttributeFilterService +
-last successful reload attempt: 2019-12-13T14:​33:​29Z +
-last reload attempt: 2019-12-13T14:​33:​29Z +
-</​code>​ +
- +
-===== 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.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/​edit-webapp/'',​ jehož obsah se při aktualizaci Shibboleth IdP, narozdíl od adresáře ''/​opt/​shibboleth-idp/​webapp/'',​ nepřepisuje. +
- +
-Po úpravách v adresáři ''/​opt/​shibboleth-idp/​edit-webapp/''​ je nutné přegenerovat ''​idp.war''​. Po zadání následujících příkazů je třeba potvrdit cílový adresář s instalací Shibboleth IdP. +
- +
-<code bash> +
-# Přegenerování idp.war +
-cd /​opt/​shibboleth-idp +
-./​bin/​build.sh +
-</​code>​ +
- +
-<code bash> +
-# Průběh generování nového idp.war +
-Installation Directory: [/​opt/​shibboleth-idp] +
- +
-Rebuilding /​opt/​shibboleth-idp/​war/​idp.war ... +
-...done +
- +
-BUILD SUCCESSFUL +
-Total time: 3 seconds +
-</​code>​ +
- +
-Pak je ještě nutné restartovat Jetty: +
- +
-<code bash> +
-# Restart Jetty +
-systemctl restart jetty9 +
-</​code>​ +
- +
----- +
- +
-**Máme-li nainstalován Shibboleth IdP, můžeme pokračovat [[cs:​tech:​metadata-publication|publikací metadat]].** +