Rozdíly
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í verzeObě strany příští revize | ||
cs:tech:idp:shibboleth:new [2020/03/26 19:03] – [Tipy] 9ec128d6c1ed31e124c9d0343d1175613f20f405@einfra.cesnet.cz | cs:tech:idp:shibboleth:new [2020/03/27 13:32] – odstraněno 9ec128d6c1ed31e124c9d0343d1175613f20f405@einfra.cesnet.cz | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | <WRAP center alert 100%> | ||
- | **Tento návod je určený pro // | ||
- | </ | ||
- | |||
- | ====== 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: | ||
- | |||
- | ---- | ||
- | |||
- | ===== Instalace ===== | ||
- | |||
- | Zdrojové kódy stáhneme [[https:// | ||
- | |||
- | <code bash> | ||
- | # Stažení zdrojového kódu Shibboleth IdP | ||
- | wget -P /opt \ | ||
- | | ||
- | | ||
- | | ||
- | |||
- | # 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:// | ||
- | # Nyní můžeme provést samotnou kontrolu | ||
- | gpg --verify shibboleth-identity-provider-4.0.0.tar.gz.asc | ||
- | </ | ||
- | |||
- | 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/ | ||
- | ./ | ||
- | </ | ||
- | |||
- | 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 (// | ||
- | - potvrdíme entityID, | ||
- | - zadáme scope organizace (pokud není vyplněn správně). | ||
- | |||
- | Zde je vyobrazen průběh instalačního skriptu '' | ||
- | |||
- | <code bash> | ||
- | Buildfile: / | ||
- | |||
- | install: | ||
- | Source (Distribution) Directory (press < | ||
- | |||
- | Installation Directory: [/ | ||
- | |||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | Host Name: [idp.example.org] ? | ||
- | |||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | Backchannel PKCS12 Password: | ||
- | Re-enter password: | ||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | Cookie Encryption Key Password: | ||
- | Re-enter password: | ||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | INFO [net.shibboleth.utilities.java.support.security.BasicKeystoreKeyStrategyTool: | ||
- | SAML EntityID: [https:// | ||
- | |||
- | Attribute Scope: [example.org] ? | ||
- | |||
- | INFO [net.shibboleth.idp.installer.V4Install: | ||
- | INFO [net.shibboleth.idp.installer.BuildWar: | ||
- | INFO [net.shibboleth.idp.installer.BuildWar: | ||
- | INFO [net.shibboleth.idp.installer.BuildWar: | ||
- | INFO [net.shibboleth.idp.installer.BuildWar: | ||
- | |||
- | BUILD SUCCESSFUL | ||
- | Total time: 37 seconds | ||
- | </ | ||
- | |||
- | 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 ''/ | ||
- | |||
- | 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 / | ||
- | </ | ||
- | |||
- | Nastavíme '' | ||
- | |||
- | <code ini> | ||
- | # | ||
- | # | ||
- | idp.consent.StorageService = shibboleth.JPAStorageService | ||
- | </ | ||
- | |||
- | ==== ldap.properties ==== | ||
- | |||
- | V souboru ''/ | ||
- | |||
- | <code bash> | ||
- | # Otevřeme konfigurační soubor ldap.properties | ||
- | vim / | ||
- | </ | ||
- | |||
- | Důležité jsou především následující volby: | ||
- | |||
- | <code ini> | ||
- | idp.authn.LDAP.authenticator | ||
- | idp.authn.LDAP.ldapURL | ||
- | idp.authn.LDAP.useStartTLS | ||
- | idp.authn.LDAP.useSSL | ||
- | idp.authn.LDAP.sslConfig | ||
- | idp.authn.LDAP.trustCertificates = %{idp.home}/ | ||
- | idp.authn.LDAP.baseDN | ||
- | idp.authn.LDAP.subtreeSearch | ||
- | idp.authn.LDAP.bindDN | ||
- | idp.ldaptive.provider | ||
- | </ | ||
- | |||
- | První konfigurační parametr '' | ||
- | |||
- | Volba '' | ||
- | |||
- | //Poznámka k ldapURL:// V ldapURL nesmíme uvést koncové lomítko, např. '' | ||
- | |||
- | Konfigurační volby '' | ||
- | |||
- | Volba '' | ||
- | |||
- | Volba na posledním řádku ('' | ||
- | |||
- | ==== secrets.properties ==== | ||
- | |||
- | FIXME | ||
- | |||
- | V souboru ''/ | ||
- | |||
- | <code bash> | ||
- | # Vygenerování soli | ||
- | openssl rand -base64 36 | ||
- | </ | ||
- | |||
- | <code bash> | ||
- | # Otevřeme konfigurační soubor secrets.properties | ||
- | vim / | ||
- | </ | ||
- | |||
- | Volba '' | ||
- | |||
- | <code ini> | ||
- | idp.authn.LDAP.bindDNCredential = nejakeheslo | ||
- | |||
- | idp.persistentId.salt = ___SALT___ | ||
- | </ | ||
- | |||
- | ==== metadata-providers.xml ==== | ||
- | |||
- | V konfiguračním souboru ''/ | ||
- | |||
- | <code bash> | ||
- | # Otevřeme konfigurační soubor metadata-providers.xml | ||
- | vim / | ||
- | </ | ||
- | |||
- | <code xml> | ||
- | < | ||
- | id=" | ||
- | xsi: | ||
- | backingFile=" | ||
- | metadataURL=" | ||
- | maxRefreshDelay=" | ||
- | |||
- | < | ||
- | xsi: | ||
- | requireSignedRoot=" | ||
- | certificateFile=" | ||
- | |||
- | < | ||
- | xsi: | ||
- | maxValidityInterval=" | ||
- | |||
- | </ | ||
- | |||
- | <!-- eduGAIN --> | ||
- | < | ||
- | id=" | ||
- | xsi: | ||
- | backingFile=" | ||
- | metadataURL=" | ||
- | maxRefreshDelay=" | ||
- | |||
- | < | ||
- | xsi: | ||
- | requireSignedRoot=" | ||
- | certificateFile=" | ||
- | |||
- | < | ||
- | xsi: | ||
- | maxValidityInterval=" | ||
- | |||
- | </ | ||
- | </ | ||
- | |||
- | //Blok kódu výše, tedy element < | ||
- | |||
- | Pokud by vás zajímal význam atributů v elementu ''< | ||
- | |||
- | 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:// | ||
- | |||
- | <code bash> | ||
- | # Stažení veřejného klíče metadata.eduid.cz.crt.pem | ||
- | wget -P / | ||
- | https:// | ||
- | </ | ||
- | |||
- | ==== attribute-resolver.xml ==== | ||
- | |||
- | FIXME: **Důkladně otestovat šablonu pro V4!** | ||
- | |||
- | Chcete-li si konfigurační soubor ''/ | ||
- | |||
- | Doporučuji však usnadnit si práci a vyjít z připraveného souboru na adrese [[https:// | ||
- | |||
- | <WRAP alert> | ||
- | **Návod v následujících krocích předpokládá, | ||
- | |||
- | Navíc se předpokládá, | ||
- | </ | ||
- | |||
- | <code bash> | ||
- | # Stažení attribute-resolver.xml | ||
- | wget -O / | ||
- | https:// | ||
- | </ | ||
- | |||
- | Potřebujete-li si definovat své atributy, pak bližší informace ke konfiguraci naleznete [[https:// | ||
- | |||
- | ==== 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, | ||
- | |||
- | Z důvodu zjednodušení doporučujeme uvolňovat atributy dle našeho doporučení na adrese [[https:// | ||
- | |||
- | Filtr uvolňuje atributy podle kategorií entit [[cs: | ||
- | |||
- | <code bash> | ||
- | wget -O / | ||
- | https:// | ||
- | </ | ||
- | |||
- | Chcete-li si nastavit uvolňování atributů dle svého, tak bližší informace naleznete [[https:// | ||
- | |||
- | ==== idp-metadata.xml ==== | ||
- | |||
- | Soubor ''/ | ||
- | |||
- | <code bash> | ||
- | # Otevřeme konfigurační soubor idp-metadata.xml | ||
- | vi / | ||
- | </ | ||
- | |||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | Dále je nutno doplnit název organizace v elementu ''< | ||
- | |||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | |||
- | Chybět nesmí ani kontaktní osoby v elementu ''< | ||
- | |||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | |||
- | V metadatech ještě doplníme podporu pro persistentní identifikátor. | ||
- | |||
- | Přidáme do elementu ''< | ||
- | |||
- | <code xml> | ||
- | < | ||
- | </ | ||
- | |||
- | === eduGAIN === | ||
- | |||
- | Kromě služeb ve federaci [[cs: | ||
- | |||
- | **Pozor!** Následující kód je třeba umístit přesně tímto způsobem! Nejprve je element ''< | ||
- | |||
- | <code xml> | ||
- | < | ||
- | |||
- | < | ||
- | |||
- | <!-- eduGAIN --> | ||
- | < | ||
- | < | ||
- | </ | ||
- | |||
- | < | ||
- | <!-- Zde následují element Scope a UIInfo --> | ||
- | < | ||
- | |||
- | </ | ||
- | |||
- | </ | ||
- | </ | ||
- | |||
- | ==== global.xml ==== | ||
- | |||
- | Nyní je potřeba v souboru '' | ||
- | |||
- | |||
- | <code bash> | ||
- | # Úpravy v konfiguračním souboru global.xml | ||
- | vi / | ||
- | </ | ||
- | |||
- | V prvním bloku kódu nahradíme '' | ||
- | |||
- | <code xml> | ||
- | <bean id=" | ||
- | class=" | ||
- | p: | ||
- | p: | ||
- | p: | ||
- | p: | ||
- | |||
- | <bean id=" | ||
- | class=" | ||
- | p: | ||
- | c: | ||
- | |||
- | <bean id=" | ||
- | class=" | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | <bean class=" | ||
- | </ | ||
- | </ | ||
- | |||
- | <bean id=" | ||
- | class=" | ||
- | p: | ||
- | p: | ||
- | p: | ||
- | </ | ||
- | |||
- | ==== saml-nameid.properties ==== | ||
- | |||
- | Dále musíme provést úpravy v konfiguračním souboru '' | ||
- | |||
- | <code bash> | ||
- | # Úpravy v konfiguračním souboru saml-nameid.properties | ||
- | vi / | ||
- | </ | ||
- | |||
- | FIXME | ||
- | |||
- | Zde definujeme odkazy na výše definované "< | ||
- | |||
- | <code ini> | ||
- | idp.persistentId.sourceAttribute = uid | ||
- | # Nové IdP | ||
- | idp.persistentId.encoding = BASE32 | ||
- | # Migrované IdP | ||
- | # | ||
- | idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator | ||
- | idp.persistentId.dataSource = shibboleth.MySQLDataSource | ||
- | </ | ||
- | |||
- | ==== saml-nameid.xml ==== | ||
- | |||
- | Podpora persistentních identifikátorů je ještě potřeba zapnout v konfiguračním souboru '' | ||
- | |||
- | <code bash> | ||
- | # Úpravy v konfiguračním souboru saml-nameid.xml | ||
- | vi / | ||
- | </ | ||
- | |||
- | Stačí odkomentovat následující řádek, který je ve výchozí konfiguraci po instalaci IdP zakomentovaný. | ||
- | |||
- | <code xml> | ||
- | <ref bean=" | ||
- | </ | ||
- | |||
- | ==== subject-c14n.xml ==== | ||
- | |||
- | Teď ještě zbývá úprava v souboru '' | ||
- | |||
- | <code bash> | ||
- | # Úpravy v konfiguračním souboru subject-c14n.xml | ||
- | vi / | ||
- | </ | ||
- | |||
- | Odkomentujeme tedy následující řádek: | ||
- | |||
- | <code xml> | ||
- | <ref bean=" | ||
- | </ | ||
- | |||
- | ===== Spuštění ===== | ||
- | |||
- | Nyní, když máme IdP nakonfigurováno, | ||
- | |||
- | <code bash> | ||
- | # Úprava práv | ||
- | chown jetty / | ||
- | chgrp -R jetty / | ||
- | chmod -R g+r / | ||
- | chmod 750 / | ||
- | chmod 640 / | ||
- | </ | ||
- | |||
- | 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 | ||
- | </ | ||
- | |||
- | Nastavení práv pro záspis do adresářů ''/ | ||
- | |||
- | <code ini> | ||
- | [Service] | ||
- | ReadWritePaths=/ | ||
- | ReadWritePaths=/ | ||
- | </ | ||
- | |||
- | 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 | ||
- | </ | ||
- | |||
- | Nyní, jakmile Jetty po chvilce nastartuje, můžeme vyzkoušet, zda IdP v pořádku běží: | ||
- | |||
- | <code bash> | ||
- | # Zobrazení stavu IdP | ||
- | / | ||
- | </ | ||
- | |||
- | Pokud IdP korektně běží, uvidíte následující: | ||
- | |||
- | < | ||
- | ### Operating Environment Information | ||
- | operating_system: | ||
- | operating_system_version: | ||
- | operating_system_architecture: | ||
- | jdk_version: | ||
- | available_cores: | ||
- | used_memory: | ||
- | maximum_memory: | ||
- | |||
- | ### Identity Provider Information | ||
- | idp_version: | ||
- | start_time: 2019-12-13T15: | ||
- | current_time: | ||
- | uptime: 2512 ms | ||
- | |||
- | service: shibboleth.LoggingService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | service: shibboleth.ReloadableAccessControlService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | service: shibboleth.MetadataResolverService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | metadata source: eduidcz | ||
- | last refresh attempt: 2019-12-13T14: | ||
- | last successful refresh: 2019-12-13T14: | ||
- | last update: 2019-12-13T14: | ||
- | root validUntil: 2020-01-12T14: | ||
- | |||
- | metadata source: edugain | ||
- | last refresh attempt: 2019-12-13T14: | ||
- | last successful refresh: 2019-12-13T14: | ||
- | last update: 2019-12-13T14: | ||
- | root validUntil: 2020-01-09T15: | ||
- | |||
- | service: shibboleth.RelyingPartyResolverService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | service: shibboleth.NameIdentifierGenerationService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | service: shibboleth.AttributeResolverService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | |||
- | DataConnector staticAttributes: | ||
- | |||
- | DataConnector myLDAP: has never failed | ||
- | |||
- | DataConnector myStoredId: has never failed | ||
- | |||
- | service: shibboleth.AttributeFilterService | ||
- | last successful reload attempt: 2019-12-13T14: | ||
- | last reload attempt: 2019-12-13T14: | ||
- | </ | ||
- | |||
- | ===== Tipy ===== | ||
- | |||
- | Na stránce [[cs: | ||
- | |||
- | ===== Vzhled ===== | ||
- | |||
- | Výchozí přihlašovací stránka vypadá následujícím způsobem: | ||
- | |||
- | {{: | ||
- | |||
- | Její vzhled je možno upravit do vzhledu podobnému stránkám naší organizace. Veškeré úpravy se provádí v adresáři ''/ | ||
- | |||
- | Po úpravách v adresáři ''/ | ||
- | |||
- | <code bash> | ||
- | # Přegenerování idp.war | ||
- | cd / | ||
- | ./ | ||
- | </ | ||
- | |||
- | <code bash> | ||
- | # Průběh generování nového idp.war | ||
- | Installation Directory: [/ | ||
- | |||
- | Rebuilding / | ||
- | ...done | ||
- | |||
- | BUILD SUCCESSFUL | ||
- | Total time: 3 seconds | ||
- | </ | ||
- | |||
- | Pak je ještě nutné restartovat Jetty: | ||
- | |||
- | <code bash> | ||
- | # Restart Jetty | ||
- | systemctl restart jetty9 | ||
- | </ | ||
- | |||
- | ---- | ||
- | |||
- | **Máme-li nainstalován Shibboleth IdP, můžeme pokračovat [[cs: | ||