cs:tech:idp:shibboleth:new

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cs:tech:idp:shibboleth:new [2020/03/26 20:03]
Jan Oppolzer [Tipy]
— (current)
Line 1: Line 1:
-<WRAP center alert 100%> 
-**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 ==== 
- 
-FIXME: **Důkladně otestovat šablonu pro V4!** 
- 
-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]].** 
  
Last modified:: 2020/03/26 20:03