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:new [2020/03/26 20:03] jan.oppolzer@cesnet.cz [Tipy] |
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 ==== | + | |
- | + | ||
- | 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]].** | + |