Rozdiely
Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.
| Obojstranná predošlá revízia Predchádzajúca revízia | |||
| install-idp-shibboleth [26. 05. 2020 13:10] – jsilaci@umb.sk | install-idp-shibboleth [Unknown date] (aktuálne) – odstránené - externá úprava (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Riadok 1: | Riadok 1: | ||
| - | ===== Shibboleth IdP ===== | ||
| - | Stiahneme a rozbalíme inštalačný balíček: | ||
| - | |||
| - | < | ||
| - | wget https:// | ||
| - | tar -xzf shibboleth-identity-provider-3.4.1.tar.gz | ||
| - | </ | ||
| - | |||
| - | Spustíme inštaláciu: | ||
| - | |||
| - | < | ||
| - | ./ | ||
| - | </ | ||
| - | |||
| - | Výstup: | ||
| - | |||
| - | < | ||
| - | Source (Distribution) Directory (press < | ||
| - | |||
| - | Installation Directory: [/ | ||
| - | |||
| - | Hostname: [demoidp.sanet.sk] | ||
| - | |||
| - | SAML EntityID: [https:// | ||
| - | |||
| - | Attribute Scope: [sanet.sk] | ||
| - | |||
| - | Backchannel PKCS12 Password: < | ||
| - | Re-enter password: < | ||
| - | Cookie Encryption Key Password: < | ||
| - | Re-enter password: < | ||
| - | Warning: / | ||
| - | Warning: / | ||
| - | Warning: / | ||
| - | Warning: / | ||
| - | Warning: / | ||
| - | Generating Signing Key, CN = demoidp.sanet.sk URI = https:// | ||
| - | ...done | ||
| - | Creating Encryption Key, CN = demoidp.sanet.sk URI = https:// | ||
| - | ...done | ||
| - | Creating Backchannel keystore, CN = demoidp.sanet.sk URI = https:// | ||
| - | ...done | ||
| - | Creating cookie encryption key files... | ||
| - | ...done | ||
| - | Rebuilding / | ||
| - | ...done | ||
| - | |||
| - | BUILD SUCCESSFUL | ||
| - | Total time: 3 minutes 8 seconds | ||
| - | </ | ||
| - | |||
| - | Presunieme inštalačný adresár do ''/ | ||
| - | |||
| - | < | ||
| - | mv shibboleth-identity-provider-3.4.1 /opt/ | ||
| - | chown -R idp:idp / | ||
| - | </ | ||
| - | |||
| - | Reštartujeme Jetty, servlet by sa mal nahrať: | ||
| - | |||
| - | < | ||
| - | systemctl restart jetty | ||
| - | </ | ||
| - | |||
| - | Stav IdP môžeme zobraziť príkazom: | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | Funkčnost je možné overiť aj zobrazením stránky v prehliadači: | ||
| - | |||
| - | ===== Konfigurácia IdP ===== | ||
| - | |||
| - | Prepnúť sa na používateľa idp: | ||
| - | |||
| - | < | ||
| - | su - idp | ||
| - | </ | ||
| - | |||
| - | Aby Shibboleth poznal cestu k Jave aj pod neprivilegovaným učtom musíme ju špecifikovať: | ||
| - | |||
| - | < | ||
| - | JAVA_HOME=/ | ||
| - | </ | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | V konfigurácii idp nastavíme premennú '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | idp.cookie.secure = true | ||
| - | </ | ||
| - | |||
| - | a reštartujeme jetty (ako root) | ||
| - | |||
| - | < | ||
| - | systemctl restart jetty | ||
| - | </ | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | Tu je možné obmedziť prístup k stránkam so špeciálnou funkcionalitou (pre adminov): | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | <code xml> | ||
| - | |||
| - | < | ||
| - | |||
| - | <entry key=" | ||
| - | <bean id=" | ||
| - | p: | ||
| - | </ | ||
| - | ... | ||
| - | </ | ||
| - | |||
| - | Znovunačitame konfigurácie (pokiaľ robíme pod userom idp musíme stále zadávať JAVA_HOME): | ||
| - | |||
| - | < | ||
| - | JAVA_HOME=/ | ||
| - | </ | ||
| - | |||
| - | Teraz by malo byť možné z vybraných IP zobraziť napríklad info o stave idp: https:// | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | Zaitaľ sa mi nepodarilo nakonfigurovať IdP tak aby mu stačilo spojenie s LDAP bez SSL. Možno je to bug: http:// | ||
| - | |||
| - | Pre použitie SSL treba stiahnuť ssl certifikat z LDAP servera: | ||
| - | |||
| - | < | ||
| - | openssl s_client -showcerts -connect io.fpv.umb.sk: | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | idp.authn.LDAP.authenticator | ||
| - | |||
| - | idp.authn.LDAP.ldapURL | ||
| - | idp.authn.LDAP.useStartTLS | ||
| - | idp.authn.LDAP.useSSL | ||
| - | |||
| - | idp.authn.LDAP.connectTimeout | ||
| - | idp.authn.LDAP.responseTimeout | ||
| - | |||
| - | idp.authn.LDAP.sslConfig | ||
| - | idp.authn.LDAP.trustCertificates | ||
| - | |||
| - | idp.authn.LDAP.baseDN | ||
| - | idp.authn.LDAP.subtreeSearch | ||
| - | idp.authn.LDAP.userFilter | ||
| - | idp.authn.LDAP.bindDN | ||
| - | idp.authn.LDAP.bindDNCredential | ||
| - | |||
| - | idp.attribute.resolver.LDAP.ldapURL | ||
| - | idp.attribute.resolver.LDAP.connectTimeout | ||
| - | idp.attribute.resolver.LDAP.responseTimeout | ||
| - | idp.attribute.resolver.LDAP.baseDN | ||
| - | idp.attribute.resolver.LDAP.bindDN | ||
| - | idp.attribute.resolver.LDAP.bindDNCredential | ||
| - | idp.attribute.resolver.LDAP.useStartTLS | ||
| - | idp.attribute.resolver.LDAP.trustCertificates | ||
| - | idp.attribute.resolver.LDAP.searchFilter | ||
| - | </ | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | <code xml> | ||
| - | <?xml version=" | ||
| - | <!-- This file is an EXAMPLE metadata configuration file. --> | ||
| - | |||
| - | < | ||
| - | xmlns=" | ||
| - | xmlns: | ||
| - | xmlns: | ||
| - | xmlns: | ||
| - | xmlns: | ||
| - | xsi: | ||
| - | urn: | ||
| - | urn: | ||
| - | urn: | ||
| - | | ||
| - | <!-- MEtadata federacie - maxRefreshDelay urcuje ako casto sa budu metadata aktualizovat --> | ||
| - | < | ||
| - | id=" | ||
| - | xsi: | ||
| - | backingFile=" | ||
| - | metadataURL=" | ||
| - | maxRefreshDelay=" | ||
| - | < | ||
| - | certificateFile=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Stiahnuť verejný kľúč pre kontrolu podpisu metadát: | ||
| - | |||
| - | < | ||
| - | cd / | ||
| - | wget https:// | ||
| - | </ | ||
| - | |||
| - | Reštart služby pre načítanie metadát: | ||
| - | |||
| - | < | ||
| - | JAVA_HOME=/ | ||
| - | </ | ||
| - | |||
| - | Kontrola, či sa metadata stiahli: | ||
| - | |||
| - | < | ||
| - | ls -l / | ||
| - | </ | ||
| - | |||
| - | Vo výpise by sa mal nachádzať súbor '' | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | < | ||
| - | cd / | ||
| - | mv attribute-resolver-ldap.xml attribute-resolver.xml | ||
| - | </ | ||
| - | |||
| - | > TODO: Doplnit alebo nalinkovat obsah suboru attribute-resolver.xml | ||
| - | |||
| - | ==== conf/ | ||
| - | |||
| - | Tu definujeme, ktoré atribúty budeme uvolnovať a komu. | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | > TODO: Doplnit alebo nalinkovat obsah suboru attribute-filter.xml | ||
| - | |||
| - | ==== metadata/ | ||
| - | |||
| - | Tu treba doplniť metadata. | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | > TODO: Doplnit alebo nalinkovat obsah suboru idp-metadata.xml | ||
| - | |||
| - | Po reštarte jetty budú metadata dostupné na adrese https:// | ||
| - | |||
| - | ===== Persistentný identifikátor / eduPersonTargetedID ===== | ||
| - | |||
| - | Identifikátor sa generuje pre každý pár používateľ-služba a slúži na ochranu súkromia používatela (služba zároveň vie, že sa jedná o rovnakého používateľa). Kedže sa pre každú sluzbu generuje iný identifikátor a tento identifikátor je nahodny reťazec, nie je jednoducho možne pre prevádzkovateľa služby používateľa identifikovať ale zároven to umožäuje zo strany služby ukladať rôzne personalizované nastavenia atď. V tom je hlavný rozdiel oproti identifikátoru '' | ||
| - | |||
| - | Podpora pre túto funkcionalitu nie je povinná, ale je doporučovaná. Podobný efekt je možné dosiahnuť používaním generovaného čísla namiesto loginu používateľa v '' | ||
| - | |||
| - | Navyše niektoré z konfigurašnych krokov, ktoré budú potrebné pre jeho spravádzkovanie bude potrebné aj tak urobiž kvôli ukladaniu súhlasov s poskytovaním atribútov. | ||
| - | |||
| - | Pre ukladanie údajov je odporúčané použiť databázu MySQL (nie MariaDB). | ||
| - | |||
| - | ==== MySQL ==== | ||
| - | |||
| - | Nainštalovať repozitár od Oracle - MySQL server: | ||
| - | |||
| - | < | ||
| - | yum install https:// | ||
| - | yum update | ||
| - | yum install mysql-community-server | ||
| - | </ | ||
| - | |||
| - | Spustiť server: | ||
| - | |||
| - | < | ||
| - | systemctl enable mysqld | ||
| - | systemctl startmysqld | ||
| - | </ | ||
| - | |||
| - | Po spustení server vygeneruje heslo pre roota, ktoré sa nachádza v logu: | ||
| - | |||
| - | < | ||
| - | cat / | ||
| - | </ | ||
| - | |||
| - | Spustíme procedúru pre zabezpečenie databazy, v rámci ktorej zmeníme heslo pre roota (pozor, mysql8 má štandardne aktívne dosť prísne požiadavky na zložitosť hesla). | ||
| - | |||
| - | Aby sa nám s DB ľahšie pracovalo môžeme uložiť prihlasovacie údaje do súboru '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | obsah súboru: | ||
| - | |||
| - | < | ||
| - | [client] | ||
| - | user=root | ||
| - | password=" | ||
| - | </ | ||
| - | |||
| - | Nastavíme oprávnenia pre súbor: | ||
| - | |||
| - | < | ||
| - | chmod go-rwx .my.cnf | ||
| - | </ | ||
| - | |||
| - | Prihlásime sa do cmd clienta a spustíme SQL príkazy pre vytvorenie databázy a používateľa (nezabudneme na silné heslo): | ||
| - | |||
| - | < | ||
| - | mysql | ||
| - | </ | ||
| - | |||
| - | <code sql> | ||
| - | SET NAMES ' | ||
| - | SET CHARACTER SET utf8; | ||
| - | CHARSET utf8; | ||
| - | CREATE DATABASE IF NOT EXISTS shibboleth CHARACTER SET=utf8; | ||
| - | CREATE USER ' | ||
| - | GRANT ALL ON shibboleth.* TO ' | ||
| - | FLUSH PRIVILEGES; | ||
| - | </ | ||
| - | |||
| - | Vytvoríme novú tabuľku v datábaze shibboleth: | ||
| - | |||
| - | <code sql> | ||
| - | USE shibboleth; | ||
| - | CREATE TABLE IF NOT EXISTS `shibpid` ( | ||
| - | `localEntity` VARCHAR(255) NOT NULL, | ||
| - | `peerEntity` VARCHAR(255) NOT NULL, | ||
| - | `principalName` VARCHAR(255) NOT NULL DEFAULT '', | ||
| - | `localId` VARCHAR(255) NOT NULL, | ||
| - | `persistentId` VARCHAR(50) NOT NULL, | ||
| - | `peerProvidedId` VARCHAR(255) DEFAULT NULL, | ||
| - | `creationDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| - | `deactivationDate` TIMESTAMP NULL DEFAULT NULL, | ||
| - | PRIMARY KEY (localEntity, | ||
| - | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||
| - | </ | ||
| - | |||
| - | Doinštalujeme knižnice do Jetty: | ||
| - | |||
| - | http:// | ||
| - | http:// | ||
| - | https:// | ||
| - | https:// | ||
| - | |||
| - | > TODO: Momentalne to bezi so starsimi kniznicami: | ||
| - | https:// | ||
| - | https:// | ||
| - | |||
| - | Keďže MySQL je v aktuálnej verzii 8, driver musí byť tieť " | ||
| - | |||
| - | Archívy treba porozbaľovať a potom skopírovať súbory: | ||
| - | |||
| - | < | ||
| - | cp commons-dbcp2-2.5.0/ | ||
| - | cp commons-pool2-2.6.0/ | ||
| - | cp commons-logging-api-1.1.jar / | ||
| - | cp mysql-connector-java-8.0.13/ | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | chown idp:idp / | ||
| - | </ | ||
| - | |||
| - | ==== Konfigurácia IdP ==== | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | Doplniť nový atribút: | ||
| - | |||
| - | <code xml> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | A nový data konektor: | ||
| - | |||
| - | <code xml> | ||
| - | < | ||
| - | xsi: | ||
| - | sourceAttributeID=" | ||
| - | generatedAttributeID=" | ||
| - | salt="< | ||
| - | queryTimeout=" | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Konfiguračný súbor uložíme. | ||
| - | |||
| - | Vygenerujeme salt pomocou príkazu: | ||
| - | |||
| - | < | ||
| - | openssl rand -base64 36 2>/ | ||
| - | </ | ||
| - | |||
| - | Vystup vyzerá napríklad takto: | ||
| - | |||
| - | < | ||
| - | LdudV6JOJDzQOaF/ | ||
| - | </ | ||
| - | |||
| - | Dodefinujeme potrebné beany v '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | <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: | ||
| - | </ | ||
| - | |||
| - | Nový atribút zaradíme aj do konfigurácie filtrov '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | <code xml> | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Upravíme súbor '' | ||
| - | |||
| - | < | ||
| - | vi / | ||
| - | </ | ||
| - | |||
| - | Doplníme potrebné atribúty (odkazy na beany a salt): | ||
| - | |||
| - | < | ||
| - | idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator | ||
| - | idp.persistentId.dataSource = shibboleth.MySQLDataSource | ||
| - | idp.persistentId.sourceAttribute = uid | ||
| - | idp.persistentId.salt = LdudV6JOJDzQOaF/ | ||
| - | </ | ||
| - | |||
| - | Ďalej upravíme konfiguráciu v '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | V sôbore odkomentujeme tento riadok: | ||
| - | |||
| - | <code xml> | ||
| - | <ref bean=" | ||
| - | </ | ||
| - | |||
| - | Ďalej upravíme súbor: | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | V súbore doplníme riadok: | ||
| - | |||
| - | < | ||
| - | idp.consent.StorageService = shibboleth.JPAStorageService | ||
| - | </ | ||
| - | |||
| - | Ešte ostáva upraviť súbor '' | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | V súbore odkomentujeme riadok: | ||
| - | |||
| - | <code xml> | ||
| - | <ref bean=" | ||
| - | </ | ||
| - | |||
| - | V metadatach budeme oznamovaž, že IdP podporuje persistentný identifikátor: | ||
| - | |||
| - | < | ||
| - | vim / | ||
| - | </ | ||
| - | |||
| - | Do elementu '' | ||
| - | |||
| - | <code xml> | ||
| - | < | ||
| - | </ | ||
| - | |||
| - | Vygenerujeme nový WAR súbor a reľtartujeme Jetty: | ||
| - | |||
| - | < | ||
| - | / | ||
| - | |||
| - | systemctl restart jetty | ||
| - | </ | ||
| - | |||
| - | ===== Úprava prihlasovacej stránky ===== | ||
| - | |||
| - | > TODO | ||