Rozdiely
Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.
Nasledujúca revízia | Predchádzajúca revízia | ||
install-idp [22. 07. 2019 22:15] 127.0.0.1 externá úprava |
install-idp [23. 07. 2019 23:12] jsilaci@umb.sk |
||
---|---|---|---|
Riadok 1: | Riadok 1: | ||
- | ====== Inštalácia Shibboleth ====== | + | ====== Inštalácia Shibboleth |
IdP budeme inštalovať na Centos 7 podľa návodu uverejneného na https:// | IdP budeme inštalovať na Centos 7 podľa návodu uverejneného na https:// | ||
- | < | + | Inštalácia je rozdelená do troch krokov: |
- | yum install vim wget unzip ntp | + | |
- | </ | + | |
- | ===== NTP ===== | + | - [[install-idp-server|Inštalácia a príprava operačného systému.]] |
+ | - [[install-idp-jetty|Inštalácia a konfigurácia aplikačného servera Jetty.]] | ||
+ | - [[install-idp-shibboleth|Inštalácia a konfigurácia Aplikácie Shibboleth IdP.]] | ||
- | Kvôli správnej funkcionalite IdP je dôležité aby mal server nastavený presný čas. To zabezpečíme spustením služby ntpd. | + | === Použíté zdroje === |
- | < | + | https:// |
- | systemctl enable ntpd | + | |
- | systemctl start ntpd | + | |
- | </ | + | |
- | + | ||
- | Po chvíli je možné vidieť zoznam serverov, s ktorými prebieha synchronizácia: | + | |
- | + | ||
- | < | + | |
- | ntpq -p | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ===== Oracle Java ===== | + | |
- | + | ||
- | Aplikácia Shibboleth IdP je napísaná v jazku Java. Na jej spustenie budeme potrebovať Oracle JDK. | + | |
- | Najskôr musíme na stránke http:// | + | |
- | + | ||
- | Potom stiahneme instalačný balíček (skopírujeme URL z webu - inštalujem JDK 8): | + | |
- | + | ||
- | < | + | |
- | yum install jdk-8u192-linux-x64.rpm | + | |
- | </ | + | |
- | + | ||
- | Kontrola, či je Java nainštalovaná správne: | + | |
- | + | ||
- | < | + | |
- | update-alternatives --display java | + | |
- | </ | + | |
- | + | ||
- | alebo | + | |
- | + | ||
- | < | + | |
- | java -version | + | |
- | </ | + | |
- | + | ||
- | Ak sme inštalovali Javu z RPM od Oracle, JAVA_HOME treba nastaviť na adresár: | + | |
- | + | ||
- | < | + | |
- | / | + | |
- | </ | + | |
- | + | ||
- | Pridáme export JAVA_HOME do '' | + | |
- | + | ||
- | < | + | |
- | JAVA_HOME=/ | + | |
- | export JAVA_HOME | + | |
- | </ | + | |
- | + | ||
- | ===== Java Cryptography Extension ===== | + | |
- | + | ||
- | Kvôli lepším možnostiam šifrovania treba doinštalovať JCE. | + | |
- | + | ||
- | JCE stiahneme zo stránky Oracle podobne ako JDK (so súhlasom): http:// | + | |
- | + | ||
- | Zip archív rozbalime: | + | |
- | + | ||
- | < | + | |
- | unzip -x jce_policy-8.zip | + | |
- | </ | + | |
- | + | ||
- | Rozbalené súbory skopírujeme na príslušné miesto do JAVA_HOME: | + | |
- | + | ||
- | < | + | |
- | cp UnlimitedJCEPolicyJDK8/ | + | |
- | </ | + | |
- | + | ||
- | ===== Jetty ===== | + | |
- | + | ||
- | Ako aplikačný server budeme používať Jetty (podľa odporúčania Shibbloleth). | + | |
- | + | ||
- | Server Jetty bude bežať pod neprivilegovaným používateľom (aj ked spúšťať sa bude pod rootom, ale o tom neskôr), ktorého treba vytvoriť: | + | |
- | + | ||
- | < | + | |
- | groupadd idp | + | |
- | useradd -m -g idp -s /bin/bash idp | + | |
- | </ | + | |
- | + | ||
- | Stiahneme instalačný balík z webu (napr 9.3): http:// | + | |
- | + | ||
- | Rozbalíme balík, presunieme ho do ''/ | + | |
- | + | ||
- | < | + | |
- | tar -zxvf jetty-distribution-9.3.25.v20180904.tar.gz | + | |
- | mv jetty-distribution-9.3.25.v20180904 /opt/ | + | |
- | mv / | + | |
- | </ | + | |
- | + | ||
- | Zmeníme vlastníka adresára: | + | |
- | + | ||
- | < | + | |
- | chown -R idp:idp / | + | |
- | </ | + | |
- | + | ||
- | Vytvoríme konfiguračný súbor v ''/ | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | s obsahom: | + | |
- | + | ||
- | < | + | |
- | JETTY_HOME=/ | + | |
- | JETTY_BASE=/ | + | |
- | </ | + | |
- | + | ||
- | ===== Konfigurácia Jetty ===== | + | |
- | + | ||
- | Prepneme sa do používateľa idp a nakonfigurujeme Jetty pre potreby IdP: | + | |
- | + | ||
- | < | + | |
- | su idp | + | |
- | cd / | + | |
- | java -jar / | + | |
- | </ | + | |
- | + | ||
- | Upravíme konfiguračný súbor '' | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | HTTP len pre localhost na porte 80: | + | |
- | + | ||
- | < | + | |
- | --module=http | + | |
- | jetty.http.host=localhost | + | |
- | jetty.http.port=80 | + | |
- | </ | + | |
- | + | ||
- | HTTPS bude počúvať na štandartnom porte 443: | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | jetty.ssl.port=443 | + | |
- | </ | + | |
- | + | ||
- | Kvôli spúšťaniu jetty pod neprivilegovaným používateľom na privilegovanom porte: | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | # --------------------------------------- | + | |
- | # Module: setuid | + | |
- | --module=setuid | + | |
- | + | ||
- | ## SetUID Configuration | + | |
- | jetty.setuid.startServerAsPrivileged=false | + | |
- | jetty.setuid.userName=idp | + | |
- | jetty.setuid.groupName=idp | + | |
- | jetty.setuid.umask=002 | + | |
- | </ | + | |
- | + | ||
- | Vytvoríme domovskú strúnku pre web server (stále pod používateľom idp - obsah stránky podľa uváženia - môže byť aj presmerovanie na inú stránku). | + | |
- | + | ||
- | < | + | |
- | mkdir -p / | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | Pripravíme server pre aplikáciu Shebboleth IdP: | + | |
- | + | ||
- | < | + | |
- | mkdir / | + | |
- | </ | + | |
- | + | ||
- | Vytvoríme konfiguračný súbor aplikácie: | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | s obsahom: | + | |
- | + | ||
- | <code xml> | + | |
- | < | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | ==== Ďalšie nastavenia a zabezpečenie ==== | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | Nebude sa zobrazovať verzia servera: | + | |
- | + | ||
- | < | + | |
- | jetty.httpConfig.sendServerVersion=false | + | |
- | </ | + | |
- | + | ||
- | Content-Security-Policy by sme si mali upraviť podľa našich potrieb ale zatiaľ to necháme tak. | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | <code xml> | + | |
- | <?xml version=" | + | |
- | < | + | |
- | + | ||
- | < | + | |
- | + | ||
- | <!-- =========================================================== --> | + | |
- | <!-- configure rewrite handler | + | |
- | <!-- =========================================================== --> | + | |
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | + | ||
- | + | ||
- | <!-- Set DispatcherTypes | + | |
- | <Set name=" | + | |
- | <Array type=" | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <Call name=" | + | |
- | < | + | |
- | <New class=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | <Set name=" | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | ==== SSL ==== | + | |
- | + | ||
- | Certifikát budem generovať ako root (exit). | + | |
- | + | ||
- | Pripravime si SSL certifikát, | + | |
- | + | ||
- | Vygenerovanie novej žiadosti o cerifikát: | + | |
- | + | ||
- | < | + | |
- | cd / | + | |
- | openssl req -new -newkey rsa:2048 -nodes -keyout demoidpkey -out demoidp.csr | + | |
- | </ | + | |
- | + | ||
- | Sôbor .csr poslať na podpis (stačí obsah sôboru). Podpísaný certifikát premenujeme na '' | + | |
- | + | ||
- | Momentálne by sme mali mať v adresáari ''/ | + | |
- | + | ||
- | * demoidp.crt | + | |
- | * demoidp.csr | + | |
- | * demoidp.key | + | |
- | * DigiCertCA.crt | + | |
- | + | ||
- | Súbor so žiadosťou '' | + | |
- | + | ||
- | Certifikáty musíme " | + | |
- | + | ||
- | < | + | |
- | cat demoidp.crt DigiCertCA.crt > jetty-cert.txt | + | |
- | </ | + | |
- | + | ||
- | Vytvorený sôbor prevedieme do formátu PKCS #12. Pri tejto operácii budeme vyzvaný na zadanie hesla. Heslo si zapamätáme (označíme si ho ako '' | + | |
- | + | ||
- | < | + | |
- | openssl pkcs12 -export -inkey demoidp.key -in jetty-cert.txt -out jetty-cert.pkcs12 | + | |
- | </ | + | |
- | + | ||
- | Certifikát importujeme do keystore (súbor keystore sa vytvorí v adresári, kde zadávame príkaz - pozor aby boli práva na zápis). Pri vytváraní budeme požiadaný o vytvorenie nového hesla (označíme si ho '' | + | |
- | + | ||
- | < | + | |
- | $JAVA_HOME/ | + | |
- | </ | + | |
- | + | ||
- | Keystore presunieme do ''/ | + | |
- | + | ||
- | < | + | |
- | mv keystore / | + | |
- | chown idp:idp / | + | |
- | </ | + | |
- | + | ||
- | Pomocou '' | + | |
- | + | ||
- | < | + | |
- | java -cp / | + | |
- | </ | + | |
- | + | ||
- | Výstupom príkazu bude niečo ako: | + | |
- | + | ||
- | < | + | |
- | 2018-12-06 12: | + | |
- | sKbH...Q5r9Q | + | |
- | OBF: | + | |
- | MD5: | + | |
- | </ | + | |
- | + | ||
- | Podobne treba obsfukovať aj Heslo1 | + | |
- | + | ||
- | < | + | |
- | java -cp / | + | |
- | </ | + | |
- | + | ||
- | Výstupom príkazu bude niečo ako: | + | |
- | + | ||
- | < | + | |
- | 2018-12-06 12: | + | |
- | YAbK...3tRm | + | |
- | OBF: | + | |
- | MD5: | + | |
- | </ | + | |
- | + | ||
- | Obsfukované heslá zadáme do súboru '' | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | Heslá pre '' | + | |
- | + | ||
- | < | + | |
- | jetty.sslContext.keyStorePassword=OBF: | + | |
- | jetty.sslContext.keyManagerPassword=OBF: | + | |
- | jetty.sslContext.trustStorePassword=OBF: | + | |
- | </ | + | |
- | + | ||
- | Zakážeme málo bezpečné šifry: | + | |
- | + | ||
- | Vytvoríme súbor ''/ | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | Obsah súboru: | + | |
- | + | ||
- | <code xml> | + | |
- | <?xml version=" | + | |
- | < | + | |
- | < | + | |
- | <!-- Zakázání starých a nedůvěryhodných šifer --> | + | |
- | <Call name=" | + | |
- | < | + | |
- | <Array type=" | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <!-- Zakázání nedůvěryhodných protokolů --> | + | |
- | <Call name=" | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | <!-- Povolení Forward Secrecy --> | + | |
- | <Set name=" | + | |
- | <Array type=" | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | </ | + | |
- | + | ||
- | Pridáme obsah súboru do konfigurácie https: | + | |
- | + | ||
- | < | + | |
- | echo / | + | |
- | </ | + | |
- | + | ||
- | ==== Dokončenie inštalácie Jetty ==== | + | |
- | + | ||
- | Ak sme niekde omylom zle nastavili oprávnenia nastavíme ich znovu: | + | |
- | + | ||
- | < | + | |
- | chown idp:idp -R / | + | |
- | </ | + | |
- | + | ||
- | Vytvoríme definíciu služby pre systemd: | + | |
- | + | ||
- | Jetty treba spušťať pod rootom a potom keď otvorí port 80 a 443 sa " | + | |
- | + | ||
- | < | + | |
- | vim / | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | # | + | |
- | # A basic systemd configuration for Jetty to start on boot | + | |
- | # | + | |
- | # Uses the Service scenario of ' | + | |
- | # and once the process has run, it is considered successful | + | |
- | # regardless of error code (even ' | + | |
- | # may take longer to start than jetty.sh observes it's logs | + | |
- | # for. | + | |
- | # | + | |
- | # | + | |
- | + | ||
- | [Unit] | + | |
- | Description=Jetty Web Application Server | + | |
- | After=network.target | + | |
- | + | ||
- | [Install] | + | |
- | WantedBy=multi-user.target | + | |
- | Alias=jetty.service | + | |
- | + | ||
- | [Service] | + | |
- | Type=oneshot | + | |
- | + | ||
- | # Execute pre and post scripts as root | + | |
- | PermissionsStartOnly=true | + | |
- | + | ||
- | # The process will be considered active after it exits | + | |
- | RemainAfterExit=yes | + | |
- | + | ||
- | # Note on the Start we do not wait for successful start. | + | |
- | # This is to allow the container to run beyond the jetty shell script | + | |
- | # in cases where it takes very long to start and results in jetty.sh | + | |
- | # reporting FAILED. | + | |
- | + | ||
- | ExecStart=-/ | + | |
- | ExecStop=/ | + | |
- | ExecReload=/ | + | |
- | </ | + | |
- | + | ||
- | > TREBA TO ESTE OTESTOVAT (asi ten unitfile nefunguje) | + | |
- | + | ||
- | ==== Firewall ==== | + | |
- | + | ||
- | Povoliť HTTPS na firewalle: | + | |
- | + | ||
- | < | + | |
- | firewall-cmd --zone=public --permanent --add-service=https | + | |
- | firewall-cmd --reload | + | |
- | </ | + | |
- | + | ||
- | Spustiť jetty: | + | |
- | + | ||
- | < | + | |
- | systemctl daemon-reload | + | |
- | systemctl enable jetty | + | |
- | systemctl start jetty | + | |
- | </ | + | |
- | + | ||
- | Po spustení (chvíľu to trvá) by mala fungovať homepage po nasmerovaní browsera na '' | + | |
- | + | ||
- | Zistenie stavu servera: | + | |
- | + | ||
- | < | + | |
- | / | + | |
- | </ | + | |
- | + | ||
- | ===== 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: | + | |
- | + | ||
- | <!-- safeID --> | + | |
- | < | + | |
- | 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 | + |