Rozdiely

Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.

Odkaz na tento prehľad zmien

Nasledujúca revízia
Predchádzajúca revízia
Posledná revízia Both sides next revision
install-idp [2019/07/22 20:15]
127.0.0.1 externá úprava
install-idp [2019/07/23 21:12]
jsilaci@umb.sk
Riadok 3: Riadok 3:
 IdP budeme inštalovať na Centos 7 podľa návodu uverejneného na  https://​www.eduid.cz/​cs/​tech/​idp (s príslušnými zmenami). IdP budeme inštalovať na Centos 7 podľa návodu uverejneného na  https://​www.eduid.cz/​cs/​tech/​idp (s príslušnými zmenami).
  
-<​code>​ +Inštalácia je rozdelená do troch krokov:
-yum install vim wget unzip ntp +
-</​code>​+
  
-===== 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 ===
  
-<​code>​ +https://​www.eduid.cz/cs/tech/idp
-systemctl enable ntpd +
-systemctl start ntpd +
-</​code>​ +
- +
-Po chvíli je možné vidieť zoznam serverov, s ktorými prebieha synchronizácia:​ +
- +
-<​code>​ +
-ntpq -p +
-</​code>​ +
- +
- +
-===== 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://​www.oracle.com/​technetwork/​java/​javase/​downloads/​index.html odkliknúť súhlas s lic. podmienkami Oracle: http://​www.oracle.com/​technetwork/​java/​javase/​downloads/​index.html +
- +
-Potom stiahneme instalačný balíček (skopírujeme URL z webu - inštalujem JDK 8): +
- +
-<​code>​ +
-yum install jdk-8u192-linux-x64.rpm +
-</​code>​ +
- +
-Kontrola, či je Java nainštalovaná správne: +
- +
-<​code>​ +
-update-alternatives --display java +
-</​code>​ +
- +
-alebo +
- +
-<​code>​ +
-java -version +
-</​code>​ +
- +
-Ak sme inštalovali Javu z RPM od Oracle, JAVA_HOME treba nastaviť na adresár: +
- +
-<​code>​ +
-/​usr/​java/​latest +
-</​code>​ +
- +
-Pridáme export JAVA_HOME do ''​~/​.bashrc''​ a ''​~/​.bash_profile''​ +
- +
-<​code>​ +
-JAVA_HOME=/​usr/​java/​latest +
-export JAVA_HOME +
-</​code>​ +
- +
-===== 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://​www.oracle.com/​technetwork/​java/​javase/​downloads/​jce8-download-2133166.html +
- +
-Zip archív rozbalime:​ +
- +
-<​code>​ +
-unzip -x jce_policy-8.zip +
-</​code>​ +
- +
-Rozbalené súbory skopírujeme na príslušné miesto do JAVA_HOME:​ +
- +
-<​code>​ +
-cp UnlimitedJCEPolicyJDK8/​*.jar /​usr/​java/​jdk1.8.0_192-amd64/​jre/​lib/​security/​ +
-</​code>​ +
- +
-===== 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ť:​ +
- +
-<​code>​ +
-groupadd idp +
-useradd -m -g idp -s /bin/bash idp +
-</​code>​ +
- +
-Stiahneme instalačný balík z webu (napr 9.3): http://​central.maven.org/​maven2/​org/​eclipse/​jetty/​jetty-distribution/​9.3.25.v20180904/​ +
- +
-Rozbalíme balík, presunieme ho do ''/​opt''​ a premenujeme na ''​jetty'':​ +
- +
-<​code>​ +
-tar -zxvf jetty-distribution-9.3.25.v20180904.tar.gz +
-mv jetty-distribution-9.3.25.v20180904 /opt/ +
-mv /​opt/​jetty-distribution-9.3.25.v20180904 /​opt/​jetty +
-</​code>​ +
- +
-Zmeníme vlastníka adresára:​ +
- +
-<​code>​ +
-chown -R idp:idp /​opt/​jetty +
-</​code>​ +
- +
-Vytvoríme konfiguračný súbor v ''/​etc''​ +
- +
-<​code>​ +
-vim /​etc/​default/​jetty +
-</​code>​ +
- +
-s obsahom: +
- +
-<​code>​ +
-JETTY_HOME=/​opt/​jetty +
-JETTY_BASE=/​opt/​jetty +
-</​code>​ +
- +
-===== Konfigurácia Jetty ===== +
- +
-Prepneme sa do používateľa idp a nakonfigurujeme Jetty pre potreby IdP: +
- +
-<​code>​ +
-su idp +
-cd /​opt/​jetty +
-java -jar /​opt/​jetty/​start.jar --add-to-startd=http,​https,​logging,​deploy,​jsp,​jstl,​plus,​servlets,​annotations,​ext,​resources,​logging,​requestlog,​setuid,​rewrite +
-</​code>​ +
- +
-Upravíme konfiguračný súbor ''​http.ini''​. +
- +
-<​code>​ +
-vim /​opt/​jetty/​start.d/​http.ini +
-</​code>​ +
- +
-HTTP len pre localhost na porte 80: +
- +
-<​code>​ +
---module=http +
-jetty.http.host=localhost +
-jetty.http.port=80 +
-</​code>​ +
- +
-HTTPS bude počúvať na štandartnom porte 443: +
- +
-<​code>​ +
-vim /​opt/​jetty/​start.d/​ssl.ini +
-</​code>​ +
- +
-<​code>​ +
-jetty.ssl.port=443 +
-</​code>​ +
- +
-Kvôli spúšťaniu jetty pod neprivilegovaným používateľom na privilegovanom porte: +
- +
-<​code>​ +
-vim /​opt/​jetty/​start.d/​setuid.ini +
-</​code>​ +
- +
-<​code>​ +
-# --------------------------------------- +
-# Module: setuid +
---module=setuid +
- +
-## SetUID Configuration +
-jetty.setuid.startServerAsPrivileged=false +
-jetty.setuid.userName=idp +
-jetty.setuid.groupName=idp +
-jetty.setuid.umask=002 +
-</​code>​ +
- +
-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). +
- +
-<​code>​ +
-mkdir -p /​opt/​jetty/​webapps/​root +
-vim /​opt/​jetty/​webapps/​root/​index.html +
-</​code>​ +
- +
-Pripravíme server pre aplikáciu Shebboleth IdP: +
- +
-<​code>​ +
-mkdir /​opt/​jetty/​tmp +
-</​code>​ +
- +
-Vytvoríme konfiguračný súbor aplikácie:​ +
- +
-<​code>​ +
-vim /​opt/​jetty/​webapps/​idp.xml +
-</​code>​ +
- +
-s obsahom: +
- +
-<code xml> +
-<​Configure class="​org.eclipse.jetty.webapp.WebAppContext">​ +
-    <Set name="​war">/​opt/​shibboleth-idp/​war/​idp.war</​Set>​ +
-    <Set name="​contextPath">/​idp</​Set>​ +
-    <Set name="​extractWAR">​false</​Set>​ +
-    <Set name="​copyWebDir">​false</​Set>​ +
-    <Set name="​copyWebInf">​true</​Set>​ +
-    <Set name="​tempDirectory">/​opt/​jetty/​tmp</​Set>​ +
-</​Configure>​ +
-</​code>​ +
- +
-==== Ďalšie nastavenia a zabezpečenie ==== +
- +
-<​code>​ +
-vim /​opt/​jetty/​start.d/​server.ini +
-</​code>​ +
- +
-Nebude sa zobrazovať verzia servera: +
- +
-<​code>​ +
-jetty.httpConfig.sendServerVersion=false +
-</​code>​ +
- +
-Content-Security-Policy by sme si mali upraviť podľa našich potrieb ale zatiaľ to necháme tak. +
- +
-<​code>​ +
-vim /​opt/​jetty/​etc/​jetty-rewrite.xml +
-</​code>​ +
- +
-<code xml> +
-<?xml version="​1.0"?>​ +
-<​!DOCTYPE Configure PUBLIC "​-//​Jetty//​Configure//​EN"​ "http://www.eclipse.org/jetty/configure_9_3.dtd">​ +
-  +
-<​Configure id="​Server"​ class="​org.eclipse.jetty.server.Server">​ +
-  +
-  <!-- =========================================================== --> +
-  <!-- configure rewrite handler ​                                  ​-->​ +
-  <!-- =========================================================== --> +
-  <Call name="​insertHandler">​ +
-    <​Arg>​ +
-      <New class="​org.eclipse.jetty.rewrite.handler.RewriteHandler">​ +
-        <Set name="​rewriteRequestURI"><​Property name="​jetty.rewrite.rewriteRequestURI"​ deprecated="​rewrite.rewriteRequestURI"​ default="​true"​/></​Set>​ +
-        <Set name="​rewritePathInfo"><​Property name="​jetty.rewrite.rewritePathInfo"​ deprecated="​rewrite.rewritePathInfo"​ default="​false"/></​Set>​ +
-        <Set name="​originalPathAttribute"><​Property name="​jetty.rewrite.originalPathAttribute"​ deprecated="​rewrite.originalPathAttribute"​ default="​requestedPath"/></​Set>​ +
-  +
-  +
-        <!-- Set DispatcherTypes ​ --> +
-        <Set name="​dispatcherTypes">​ +
-          <Array type="​javax.servlet.DispatcherType">​ +
-            <​Item><​Call class="​javax.servlet.DispatcherType"​ name="​valueOf"><​Arg>​REQUEST</​Arg></​Call></​Item>​ +
-            <​Item><​Call class="​javax.servlet.DispatcherType"​ name="​valueOf"><​Arg>​ASYNC</​Arg></​Call></​Item>​ +
-          </​Array>​ +
-        </​Set>​ +
-  +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​Strict-Transport-Security</​Set>​ +
-              <Set name="​value">​max-age=15768000</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​X-Content-Type-Options</​Set>​ +
-              <Set name="​value">​nosniff</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​X-Xss-Protection</​Set>​ +
-              <Set name="​value">​1;​ mode=block</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​X-Frame-Options</​Set>​ +
-              <Set name="​value">​DENY</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​Content-Security-Policy-Report-Only</​Set>​ +
-              <Set name="​value">​default-src '​self';​ style-src '​self'​ https://​maxcdn.bootstrapcdn.com;​ script-src '​self'​ https://​maxcdn.bootstrapcdn.com https://​ajax.googleapis.com;​ img-src '​self';​ font-src https://​maxcdn.bootstrapcdn.com;​ frame-ancestors '​none'</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-        <Call name="​addRule">​ +
-          <​Arg>​ +
-            <New class="​org.eclipse.jetty.rewrite.handler.HeaderPatternRule">​ +
-              <Set name="​pattern">​*</​Set>​ +
-              <Set name="​name">​Referrer-Policy</​Set>​ +
-              <Set name="​value">​no-referrer-when-downgrade</​Set>​ +
-            </​New>​ +
-          </​Arg>​ +
-        </​Call>​ +
-  +
-      </​New>​ +
-    </​Arg>​ +
-  </​Call>​ +
-</​Configure>​ +
-</​code>​ +
- +
-==== SSL ==== +
- +
-Certifikát budem generovať ako root (exit). +
- +
-Pripravime si SSL certifikát,​ ktorý budeme potrebovať ďalej.  +
- +
-Vygenerovanie novej žiadosti o cerifikát:​ +
- +
-<​code>​ +
-cd /​root/​ssl_cert +
-openssl req -new -newkey rsa:2048 -nodes -keyout demoidpkey -out demoidp.csr +
-</​code>​ +
- +
-Sôbor .csr poslať na podpis (stačí obsah sôboru). Podpísaný certifikát premenujeme na ''​demoidp.crt''​. +
- +
-Momentálne by sme mali mať v adresáari ''/​root/​ssl_cert''​ tieto certifikáty:​ +
- +
-  * demoidp.crt +
-  * demoidp.csr +
-  * demoidp.key +
-  * DigiCertCA.crt +
- +
-Súbor so žiadosťou ''​demoidp.csr''​ už nebudeme potrebovať. +
- +
-Certifikáty musíme "​zlúčiť"​ do jedného sôboru: +
- +
-<​code>​ +
-cat demoidp.crt DigiCertCA.crt > jetty-cert.txt +
-</​code>​ +
- +
-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 ''​Heslo1''​):​ +
- +
-<​code>​ +
-openssl pkcs12 -export -inkey demoidp.key -in jetty-cert.txt -out jetty-cert.pkcs12 +
-</​code>​ +
- +
-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 ''​Heslo2''​) a zadanie pôvodného hesla k certifikatu (''​Heslo1''​). +
- +
-<​code>​ +
-$JAVA_HOME/​bin/​keytool -importkeystore -srckeystore jetty-cert.pkcs12 -srcstoretype PKCS12 -destkeystore keystore +
-</​code>​ +
- +
-Keystore presunieme do ''/​etc''​ a zmeníme mu oprávnenia:​ +
- +
-<​code>​ +
-mv keystore /​opt/​jetty/​etc +
-chown idp:idp /​opt/​jetty/​etc/​keystore +
-</​code>​ +
- +
-Pomocou ''​jetty-util''​ vygenerujeme obsfukované verzie hesiel ''​Heslo1''​ a ''​Heslo2'':​ +
- +
-<​code>​ +
-java -cp /​opt/​jetty/​lib/​jetty-util-9.3.25.v20180904.jar org.eclipse.jetty.util.security.Password <​Heslo2>​ +
-</​code>​ +
- +
-Výstupom príkazu bude niečo ako: +
- +
-<​code>​ +
-2018-12-06 12:​28:​09.771:​INFO::​main:​ Logging initialized @97ms +
-sKbH...Q5r9Q +
-OBF:​1rxd1f9t1...1l5b1pbe1dv01v2n1f8t1rvh +
-MD5:​b31221...a3b41cbac61f +
-</​code>​ +
- +
-Podobne treba obsfukovať aj Heslo1 +
- +
-<​code>​ +
-java -cp /​opt/​jetty/​lib/​jetty-util-9.3.25.v20180904.jar org.eclipse.jetty.util.security.Password <​Heslo1>​ +
-</​code>​ +
- +
-Výstupom príkazu bude niečo ako: +
- +
-<​code>​ +
-2018-12-06 12:​30:​12.968:​INFO::​main:​ Logging initialized @98ms +
-YAbK...3tRm +
-OBF:​1sa31i7i1vfx...61jlf1e1z1vgx1i8g1sb7 +
-MD5:​34cdf9c2...904d366401d6 +
-</​code>​ +
- +
-Obsfukované heslá zadáme do súboru ''​start.d/​ssl.ini'':​ +
- +
-<​code>​ +
-vim /​opt/​jetty/​start.d/​ssl.ini +
-</​code>​ +
- +
-Heslá pre ''​keyStorePassword''​ a ''​trustStorePassword''​ su rovnaké: +
- +
-<​code>​ +
-jetty.sslContext.keyStorePassword=OBF:​1rxd1f9t1v1r...1f8t1rvh ​       #Heslo2 +
-jetty.sslContext.keyManagerPassword=OBF:​1sa31i7i1vfx1...1i8g1sb7 ​    #​Heslo1 +
-jetty.sslContext.trustStorePassword=OBF:​1rxd1f9t1v1r...1v2n1f8t1rvh ​ #Heslo2 +
-</​code>​ +
- +
-Zakážeme málo bezpečné šifry: +
- +
-Vytvoríme súbor ''/​opt/​jetty/​etc/​tweak-ssl.xml''​ +
- +
-<​code>​ +
-vim /​opt/​jetty/​etc/​tweak-ssl.xml +
-</​code>​ +
- +
-Obsah súboru: +
- +
-<code xml> +
-<?xml version="​1.0"?>​ +
-<​!DOCTYPE Configure PUBLIC "​-//​Jetty//​Configure//​EN"​ "​http://​www.eclipse.org/​jetty/​configure_9_3.dtd">​ +
-<​Configure id="​sslContextFactory"​ class="​org.eclipse.jetty.util.ssl.SslContextFactory">​ +
-  <!-- Zakázání starých a nedůvěryhodných šifer --> +
-  <Call name="​addExcludeCipherSuites">​ +
-    <​Arg>​ +
-      <Array type="​String">​ +
-        <​Item>​.*DES.*</​Item>​ +
-        <​Item>​.*DSS.*</​Item>​ +
-        <​Item>​.*MD5.*</​Item>​ +
-        <​Item>​.*NULL.*</​Item>​ +
-        <​Item>​.*RC4.*</​Item>​ +
-        <​Item>​.*_RSA_.*MD5$</​Item>​ +
-        <​Item>​.*_RSA_.*SHA$</​Item>​ +
-        <​Item>​.*_RSA_.*SHA1$</​Item>​ +
-        <​Item>​TLS_DHE_RSA_WITH_AES_128.*</​Item>​ +
-        <​Item>​TLS_DHE_RSA_WITH_AES_256.*</​Item>​ +
-      </​Array>​ +
-    </​Arg>​ +
-  </​Call>​ +
- +
-  <!-- Zakázání nedůvěryhodných protokolů --> +
-  <Call name="​addExcludeProtocols">​ +
-    <​Arg>​ +
-     <​Array type="​java.lang.String">​ +
-       <​Item>​SSL</​Item>​ +
-       <​Item>​SSLv2</​Item>​ +
-       <​Item>​SSLv2Hello</​Item>​ +
-       <​Item>​SSLv3</​Item>​ +
-     </​Array>​ +
-    </​Arg>​ +
-  </​Call>​ +
- +
-  <!-- Povolení Forward Secrecy --> +
-  <Set name="​IncludeCipherSuites">​ +
-    <Array type="​String">​ +
-      <​Item>​TLS_DHE_RSA.*</​Item>​ +
-      <​Item>​TLS_ECDHE.*</​Item>​ +
-    </​Array>​ +
-  </​Set>​ +
- +
-</​Configure>​ +
-</​code>​ +
- +
-Pridáme obsah súboru do konfigurácie https: +
- +
-<​code>​ +
-echo /​opt/​jetty/​etc/​tweak-ssl.xml >> /​opt/​jetty/​start.d/​https.ini +
-</​code>​ +
- +
-==== Dokončenie inštalácie Jetty ==== +
- +
-Ak sme niekde omylom zle nastavili oprávnenia nastavíme ich znovu: +
- +
-<​code>​ +
-chown idp:idp -R /​opt/​jetty +
-</​code>​ +
- +
-Vytvoríme definíciu služby pre systemd: +
- +
-Jetty treba spušťať pod rootom a potom keď otvorí port 80 a 443 sa "​znížia"​ jeho oprávnenia na idp. Používateľ idp tie porty nevie otvoriť. +
- +
-<​code>​ +
-vim /​etc/​systemd/​system/​jetty.service +
-</​code>​ +
- +
-<​code>​ +
-+
-# A basic systemd configuration for Jetty to start on boot  +
-#  +
-# Uses the Service scenario of '​oneshot'​ run as root +
-# and once the process has run, it is considered successful +
-# regardless of error code (even '​FAILURE'​) as jetty +
-# 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. ​ It's a false positive on failure. +
- +
-ExecStart=-/​opt/​jetty/​bin/​jetty.sh start +
-ExecStop=/​opt/​jetty/​bin/​jetty.sh stop +
-ExecReload=/​opt/​jetty/​bin/​jetty.sh restart  +
-</​code>​ +
- +
-> TREBA TO ESTE OTESTOVAT (asi ten unitfile nefunguje) +
- +
-==== Firewall ==== +
- +
-Povoliť HTTPS na firewalle:​ +
- +
-<​code>​ +
-firewall-cmd --zone=public --permanent --add-service=https +
-firewall-cmd --reload +
-</​code>​ +
- +
-Spustiť jetty: +
- +
-<​code>​ +
-systemctl daemon-reload +
-systemctl enable jetty +
-systemctl start jetty +
-</​code>​ +
- +
-Po spustení (chvíľu to trvá) by mala fungovať homepage po nasmerovaní browsera na ''​demoidp.sanet.sk''​. +
- +
-Zistenie stavu servera: +
- +
-<​code>​ +
-/​opt/​jetty/​bin/​jetty.sh check +
-</​code>​ +
- +
-===== Shibboleth IdP ===== +
- +
-Stiahneme a rozbalíme inľtalačný balíček:​ +
- +
-<​code>​ +
-wget https://​shibboleth.net/​downloads/​identity-provider/​3.4.1/​shibboleth-identity-provider-3.4.1.tar.gz +
-tar -xzf shibboleth-identity-provider-3.4.1.tar.gz +
-</​code>​ +
- +
-Spustíme inštaláciu:​ +
- +
-<​code>​ +
-./​shibboleth-identity-provider-3.4.1/​bin/​install.sh +
-</​code>​ +
- +
-Výstup: +
- +
-<​code>​ +
-Source (Distribution) Directory (press <​enter>​ to accept default): [/​root/​shibboleth-identity-provider-3.4.1] +
- +
-Installation Directory: [/​opt/​shibboleth-idp] +
- +
-Hostname: [demoidp.sanet.sk] +
- +
-SAML EntityID: [https://​demoidp.sanet.sk/​idp/​shibboleth] +
- +
-Attribute Scope: [sanet.sk] +
- +
-Backchannel PKCS12 Password: <​Heslo3>​ +
-Re-enter password: <​Heslo3>​ +
-Cookie Encryption Key Password: <​Heslo4>​ +
-Re-enter password: <​Heslo4>​ +
-Warning: /​opt/​shibboleth-idp/​bin does not exist. +
-Warning: /​opt/​shibboleth-idp/​edit-webapp does not exist. +
-Warning: /​opt/​shibboleth-idp/​dist does not exist. +
-Warning: /​opt/​shibboleth-idp/​doc does not exist. +
-Warning: /​opt/​shibboleth-idp/​system does not exist. +
-Generating Signing Key, CN = demoidp.sanet.sk URI = https://​demoidp.sanet.sk/​idp/​shibboleth ... +
-...done +
-Creating Encryption Key, CN = demoidp.sanet.sk URI = https://​demoidp.sanet.sk/​idp/​shibboleth ... +
-...done +
-Creating Backchannel keystore, CN = demoidp.sanet.sk URI = https://​demoidp.sanet.sk/​idp/​shibboleth ... +
-...done +
-Creating cookie encryption key files... +
-...done +
-Rebuilding /​opt/​shibboleth-idp/​war/​idp.war ... +
-...done +
- +
-BUILD SUCCESSFUL +
-Total time: 3 minutes 8 seconds +
-</​code>​ +
- +
-Presunieme inštalačný adresár do ''/​opt''​ (zatial neviem načo) a nastavíme opravnenia:​ +
- +
-<​code>​ +
-mv shibboleth-identity-provider-3.4.1 /opt/ +
-chown -R idp:idp /​opt/​shibboleth-id* +
-</​code>​ +
- +
-Reštartujeme Jetty, servlet by sa mal nahrať: +
- +
-<​code>​ +
-systemctl restart jetty +
-</​code>​ +
- +
-Stav IdP môžeme zobraziť príkazom:​ +
- +
-<​code>​ +
-/​opt/​shibboleth-idp/​bin/​status.sh +
-</​code>​ +
- +
-Funkčnost je možné overiť aj zobrazením stránky v prehliadači:​ https://​demoidp.sanet.sk/​idp +
- +
-===== Konfigurácia IdP ===== +
- +
-Prepnúť sa na používateľa idp: +
- +
-<​code>​ +
-su - idp +
-</​code>​ +
- +
-Aby Shibboleth poznal cestu k Jave aj pod neprivilegovaným učtom musíme ju špecifikovať:​ +
- +
-<​code>​ +
-JAVA_HOME=/​usr/​java/​latest /​opt/​shibboleth-idp/​bin/​reload-service.sh -id shibboleth.ReloadableAccessControlService +
-</​code>​ +
- +
-==== conf/​idp.properties ==== +
- +
-V konfigurácii idp nastavíme premennú ''​idp.cookie.secure''​ na true (odkomentovať a zmeniť na true): +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​idp.properties +
-</​code>​ +
- +
-<​code>​ +
-idp.cookie.secure = true +
-</​code>​ +
- +
-a reštartujeme jetty (ako root) +
- +
-<​code>​ +
-systemctl restart jetty +
-</​code>​ +
- +
-==== conf/​access-control.xml ==== +
- +
-Tu je možné obmedziť prístup k stránkam so špeciálnou funkcionalitou (pre adminov): +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​access-control.xml +
-</​code>​ +
- +
-<code xml> +
- +
-<​util:​map id="​shibboleth.AccessControlPolicies">​ +
- +
-        <entry key="​AccessByIPAddress">​ +
-            <bean id="​AccessByIPAddress"​ parent="​shibboleth.IPRangeAccessControl"​ +
-                p:​allowedRanges="#​{ {'​127.0.0.1/​32',​ '​194.160.39.60/​32',​ '​194.160.44.13/​32'​} }" /> +
-        </​entry>​ +
-... +
-</​code>​ +
- +
-Znovunačitame konfigurácie (pokiaľ robíme pod userom idp musíme stále zadávať JAVA_HOME):​ +
- +
-<​code>​ +
-JAVA_HOME=/​usr/​java/​latest /​opt/​shibboleth-idp/​bin/​reload-service.sh -id shibboleth.ReloadableAccessControlService +
-</​code>​ +
- +
-Teraz by malo byť možné z vybraných IP zobraziť napríklad info o stave idp: https://​demoidp.sanet.sk/​idp/​status +
- +
-==== conf/​ldap.properties ==== +
- +
-Zaitaľ sa mi nepodarilo nakonfigurovať IdP tak aby mu stačilo spojenie s LDAP bez SSL. Možno je to bug: http://​shibboleth.net/​pipermail/​users/​2015-August/​023536.html +
- +
-Pre použitie SSL treba stiahnuť ssl certifikat z LDAP servera: +
- +
-<​code>​ +
-openssl s_client -showcerts -connect io.fpv.umb.sk:​636 </​dev/​null 2>/​dev/​null|openssl x509 -outform PEM > /​opt/​shibboleth-idp/​credentials/​ldap-server.crt +
-</​code>​ +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​ldap.properties +
-</​code>​ +
- +
-<​code>​ +
-idp.authn.LDAP.authenticator ​                  = bindSearchAuthenticator +
- +
-idp.authn.LDAP.ldapURL ​                        = ldaps://​ldap.umb.sk:​636 +
-idp.authn.LDAP.useStartTLS ​                    = false +
-idp.authn.LDAP.useSSL ​                         = true +
- +
-idp.authn.LDAP.connectTimeout ​                 = PT3S +
-idp.authn.LDAP.responseTimeout ​                = PT3S +
- +
-idp.authn.LDAP.sslConfig ​                      = certificateTrust +
-idp.authn.LDAP.trustCertificates ​              = %{idp.home}/​credentials/​ldap-server.crt +
- +
-idp.authn.LDAP.baseDN ​                         = ou=users,​dc=ldap,​dc=umb,​dc=sk +
-idp.authn.LDAP.subtreeSearch ​                  = true +
-idp.authn.LDAP.userFilter ​                     = (uid={user}) +
-idp.authn.LDAP.bindDN ​                         = cn=demoidp,​ou=system,​ou=users,​dc=ldap,​dc=umb,​dc=sk +
-idp.authn.LDAP.bindDNCredential ​               = ------- heslo pre ldap usera ------- +
- +
-idp.attribute.resolver.LDAP.ldapURL ​            = %{idp.authn.LDAP.ldapURL} +
-idp.attribute.resolver.LDAP.connectTimeout ​     = %{idp.authn.LDAP.connectTimeout:​PT3S} +
-idp.attribute.resolver.LDAP.responseTimeout ​    = %{idp.authn.LDAP.responseTimeout:​PT3S} +
-idp.attribute.resolver.LDAP.baseDN ​             = %{idp.authn.LDAP.baseDN:​undefined} +
-idp.attribute.resolver.LDAP.bindDN ​             = %{idp.authn.LDAP.bindDN:​undefined} +
-idp.attribute.resolver.LDAP.bindDNCredential ​   = %{idp.authn.LDAP.bindDNCredential:​undefined} +
-idp.attribute.resolver.LDAP.useStartTLS ​        = %{idp.authn.LDAP.useStartTLS:​true} +
-idp.attribute.resolver.LDAP.trustCertificates ​  = %{idp.authn.LDAP.trustCertificates:​undefined} +
-idp.attribute.resolver.LDAP.searchFilter ​       = (uid=$resolutionContext.principal) +
-</​code>​ +
- +
-==== conf/​metadata-providers.xml ==== +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​metadata-providers.xml +
-</​code>​ +
- +
-<code xml> +
-<?xml version="​1.0"​ encoding="​UTF-8"?>​ +
-<!-- This file is an EXAMPLE metadata configuration file. --> +
- +
-<​MetadataProvider id="​ShibbolethMetadata"​ xsi:​type="​ChainingMetadataProvider"​ +
-    xmlns="​urn:​mace:​shibboleth:​2.0:​metadata"​ +
-    xmlns:​resource="​urn:​mace:​shibboleth:​2.0:​resource"​ +
-    xmlns:​security="​urn:​mace:​shibboleth:​2.0:​security"​ +
-    xmlns:​md="​urn:​oasis:​names:​tc:​SAML:​2.0:​metadata"​ +
-    xmlns:​xsi="​http://​www.w3.org/​2001/​XMLSchema-instance"​ +
-    xsi:​schemaLocation="​urn:​mace:​shibboleth:​2.0:​metadata http://​shibboleth.net/​schema/​idp/​shibboleth-metadata.xsd +
-                        urn:​mace:​shibboleth:​2.0:​resource http://​shibboleth.net/​schema/​idp/​shibboleth-resource.xsd +
-                        urn:​mace:​shibboleth:​2.0:​security http://​shibboleth.net/​schema/​idp/​shibboleth-security.xsd +
-                        urn:​oasis:​names:​tc:​SAML:​2.0:​metadata http://​docs.oasis-open.org/​security/​saml/​v2.0/​saml-schema-metadata-2.0.xsd">​ +
-   +
-    <!-- safeID --> +
-    <​MetadataProvider +
-        id="​safeid-metadata"​ +
-        xsi:​type="​FileBackedHTTPMetadataProvider"​ +
-        backingFile="​%{idp.home}/​metadata/​safeid.xml"​ +
-        metadataURL="​https://​www.safeid.sk/​metadata/​metadata.safeid.sk.xml"​ +
-        maxRefreshDelay="​PT2H">​ +
-        <​MetadataFilter xsi:​type="​SignatureValidation"​ requireSignedRoot="​true"​ +
-            certificateFile="​%{idp.home}/​credentials/​SAFEID_metadata_signer.pem"​ /> +
-    </​MetadataProvider>​ +
-</​MetadataProvider>​ +
-</​code>​ +
- +
-Stiahnuť verejný kľúč pre kontrolu podpisu metadát: +
- +
-<​code>​ +
-cd /​opt/​shibboleth-idp/​credentials +
-wget https://​www.safeid.sk/​metadata/​cert/​SAFEID_metadata_signer.pem +
-</​code>​ +
- +
-Reštart služby pre načítanie metadát: +
- +
-<​code>​ +
-JAVA_HOME=/​usr/​java/​latest /​opt/​shibboleth-idp/​bin/​reload-service.sh -id shibboleth.MetadataResolverService +
-</​code>​ +
- +
-Kontrola, či sa metadata stiahli: +
- +
-<​code>​ +
-ls -l /​opt/​shibboleth-idp/​metadata/​ +
-</​code>​ +
- +
-Vo výpise by sa mal nachádzať súbor ''​safeid.xml''​ s aktuálnym časom vytvorenia. +
- +
-==== conf/​attribute-resolver.xml ==== +
- +
-<​code>​ +
-cd /​opt/​shibboleth-idp/​conf +
-mv attribute-resolver-ldap.xml attribute-resolver.xml +
-</​code>​ +
- +
-> TODO: Doplnit alebo nalinkovat obsah suboru attribute-resolver.xml +
- +
-==== conf/​attribute-filter.xml ==== +
- +
-Tu definujeme, ktoré atribúty budeme uvolnovať a komu. +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​attribute-filter.xml +
-</​code>​ +
- +
-> TODO: Doplnit alebo nalinkovat obsah suboru attribute-filter.xml +
- +
-==== metadata/​idp-metadata.xml ==== +
- +
-Tu treba doplniť metadata. +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​metadata/​idp-metadata.xml +
-</​code>​ +
- +
-> TODO: Doplnit alebo nalinkovat obsah suboru idp-metadata.xml +
- +
-Po reštarte jetty budú metadata dostupné na adrese https://​demoisp.sanet.sk/​idp/​shibboleth. Metadata je potrebné validovať vo validátore:​ https://​mdr.safeid.sk/​saml-validator/​ +
- +
-===== 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 ''​eduPersonPrinciaplName'',​ ktorý má spravidla hodnotu ''​login@domena''​. +
- +
-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 ''​eduPersonPrinciaplName''​. Samorejme to stráca zmysel ak spolu s týmto identifikátorom posielame ďalšie údaje ako meno, mail atď. +
- +
-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: +
- +
-<​code>​ +
-yum install https://​repo.mysql.com//​mysql80-community-release-el7-1.noarch.rpm +
-yum update +
-yum install mysql-community-server +
-</​code>​ +
- +
-Spustiť server: +
- +
-<​code>​ +
-systemctl enable mysqld +
-systemctl startmysqld +
-</​code>​ +
- +
-Po spustení server vygeneruje heslo pre roota, ktoré sa nachádza v logu: +
- +
-<​code>​ +
-cat /​var/​log/​mysqld.log | grep password +
-</​code>​ +
- +
-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 ''​.my.cnf'':​ +
- +
-<​code>​ +
-vim /​root/​.my.cnf +
-</​code>​ +
- +
-obsah súboru: +
- +
-<​code>​ +
-[client] +
-user=root +
-password="​4T............1I"​ +
-</​code>​ +
- +
-Nastavíme oprávnenia pre súbor: +
- +
-<​code>​ +
-chmod go-rwx .my.cnf +
-</​code>​ +
- +
-Prihlásime sa do cmd clienta a spustíme SQL príkazy pre vytvorenie databázy a používateľa (nezabudneme na silné heslo): +
- +
-<​code>​ +
-mysql +
-</​code>​ +
- +
-<code sql> +
-SET NAMES '​utf8';​ +
-SET CHARACTER SET utf8; +
-CHARSET utf8; +
-CREATE DATABASE IF NOT EXISTS shibboleth CHARACTER SET=utf8; +
-CREATE USER '​shibboleth'​@'​localhost'​ IDENTIFIED BY '​jeGYjU....hFf7S';​ +
-GRANT ALL ON shibboleth.* TO '​shibboleth'​@'​localhost';​ +
-FLUSH PRIVILEGES;​ +
-</​code>​ +
- +
-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,​ peerEntity, persistentId) +
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ +
-</​code>​ +
- +
-Doinštalujeme knižnice do Jetty: +
- +
-http://​tux.rainside.sk/​apache//​commons/​dbcp/​binaries/​commons-dbcp2-2.5.0-bin.tar.gz +
-http://​tux.rainside.sk/​apache//​commons/​pool/​binaries/​commons-pool2-2.6.0-bin.tar.gz +
-https://​search.maven.org/​remotecontent?​filepath=commons-logging/​commons-logging-api/​1.1/​commons-logging-api-1.1.jar +
-https://​cdn.mysql.com//​Downloads/​Connector-J/​mysql-connector-java-8.0.13.tar.gz +
- +
-> TODO: Momentalne to bezi so starsimi kniznicami:  +
-https://​search.maven.org/​remotecontent?​filepath=org/​apache/​commons/​commons-dbcp2/​2.1.1/​commons-dbcp2-2.1.1.jar +
-https://​search.maven.org/​remotecontent?​filepath=org/​apache/​commons/​commons-pool2/​2.4.2/​commons-pool2-2.4.2.jar +
- +
-Keďže MySQL je v aktuálnej verzii 8, driver musí byť tieť "​najnovší"​ ''​mysql-connector-java-8.0.13.tar.gz''​. +
- +
-Archívy treba porozbaľovať a potom skopírovať súbory: +
- +
-<​code>​ +
-cp commons-dbcp2-2.5.0/​commons-dbcp2-2.5.0.jar /​opt/​jetty/​lib/​ext/​ +
-cp commons-pool2-2.6.0/​commons-pool2-2.6.0.jar /​opt/​jetty/​lib/​ext/​ +
-cp commons-logging-api-1.1.jar /​opt/​jetty/​lib/​ext/​ +
-cp mysql-connector-java-8.0.13/​mysql-connector-java-8.0.13.jar /​opt/​jetty/​lib/​ext/​ +
-</​code>​ +
- +
-<​code>​ +
-chown idp:idp /​opt/​jetty/​lib/​ext/​* +
-</​code>​ +
- +
-==== Konfigurácia IdP ==== +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​attribute-resolver.xml +
-</​code>​ +
- +
-Doplniť nový atribút: +
- +
-<code xml> +
-<​AttributeDefinition id="​eduPersonTargetedID"​ xsi:​type="​SAML2NameID"​ nameIdFormat="​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent">​ +
-    <​InputDataConnector ref="​myStoredId"​ attributeNames="​storedId"/>​ +
-    <​AttributeEncoder xsi:​type="​SAML1XMLObject"​ name="​urn:​oid:​1.3.6.1.4.1.5923.1.1.1.10"​ encodeType="​false"/>​ +
-    <​AttributeEncoder xsi:​type="​SAML2XMLObject"​ name="​urn:​oid:​1.3.6.1.4.1.5923.1.1.1.10"​ friendlyName="​eduPersonTargetedID"​ encodeType="​false"/>​ +
-</​AttributeDefinition>​ +
-</​code>​ +
- +
- +
-A nový data konektor: +
- +
-<code xml> +
-<​DataConnector id="​myStoredId"​ +
-    xsi:​type="​StoredId"​ +
-    sourceAttributeID="​uid"​ +
-    generatedAttributeID="​storedId"​ +
-    salt="<​Zadat vygenerovany SALT>"​ +
-    queryTimeout="​0">​ +
-    <​InputAttributeDefinition ref="​uid"/>​ +
-    <​BeanManagedConnection>​shibboleth.MySQLDataSource</​BeanManagedConnection>​ +
-</​DataConnector>​ +
-</​code>​ +
- +
-Konfiguračný súbor uložíme. +
- +
-Vygenerujeme salt pomocou príkazu: +
- +
-<​code>​ +
-openssl rand -base64 36 2>/​dev/​null +
-</​code>​ +
- +
-Vystup vyzerá napríklad takto: +
- +
-<​code>​ +
-LdudV6JOJDzQOaF/​4a75mApxsIFf7LVbjdgG3ME3hh7saPJw +
-</​code>​ +
- +
-Dodefinujeme potrebné beany v ''​global.xml''​ +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​global.xml +
-</​code>​ +
- +
-<code xml> +
-<bean id="​shibboleth.MySQLDataSource"​ +
-    class="​org.apache.commons.dbcp2.BasicDataSource"​ +
-    p:​driverClassName="​com.mysql.jdbc.Driver"​ +
-    p:​url="​jdbc:​mysql://​localhost:​3306/​shibboleth"​ +
-    p:​username="​shibboleth"​ +
-    p:​password="<​heslo pre MySQL pouzivatela shibboleth>"​ /> +
-  +
-<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>​ +
- +
-Nový atribút zaradíme aj do konfigurácie filtrov ''​attribute-filter.xml''​. Keďže sa jedná o anonymný atribút, môžeme ho sprístupnovať všetkým. +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​attribute-filter.xml +
-</​code>​ +
- +
-<code xml> +
-<​AttributeRule attributeID="​eduPersonTargetedID">​ +
-  <​PermitValueRule xsi:​type="​ANY"​ /> +
-</​AttributeRule>​ +
-</​code>​ +
- +
-Upravíme súbor ''​saml-nameid.properties'':​ +
- +
-<​code>​ +
-vi /​opt/​shibboleth-idp/​conf/​saml-nameid.properties +
-</​code>​ +
- +
-Doplníme potrebné atribúty (odkazy na beany a salt): +
- +
-<​code>​ +
-idp.persistentId.generator = shibboleth.StoredPersistentIdGenerator +
-idp.persistentId.dataSource = shibboleth.MySQLDataSource +
-idp.persistentId.sourceAttribute = uid +
-idp.persistentId.salt = LdudV6JOJDzQOaF/​4a75mApxsIFf7LVbjdgG3ME3hh7saPJw +
-</​code>​ +
- +
-Ďalej upravíme konfiguráciu v ''​saml-nameid.xml''​ +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​saml-nameid.xml +
-</​code>​ +
- +
-V sôbore odkomentujeme tento riadok: +
- +
-<code xml> +
-<ref bean="​shibboleth.SAML2PersistentGenerator"​ /> +
-</​code>​ +
- +
-Ďalej upravíme súbor: +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​idp.properties +
-</​code>​ +
- +
-V súbore doplníme riadok: +
- +
-<​code>​ +
-idp.consent.StorageService = shibboleth.JPAStorageService +
-</​code>​ +
- +
-Ešte ostáva upraviť súbor ''​subject-c14n.xml'':​ +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​conf/​c14n/​subject-c14n.xml +
-</​code>​ +
- +
-V súbore odkomentujeme riadok: +
- +
-<code xml> +
-<ref bean="​c14n/​SAML2Persistent"​ /> +
-</​code>​ +
- +
-V metadatach budeme oznamovaž, že IdP podporuje persistentný identifikátor:​ +
- +
-<​code>​ +
-vim /​opt/​shibboleth-idp/​metadata/​idp-metadata.xml +
-</​code>​ +
- +
-Do elementu ''​IDPSSODescriptor''​ pridáme element (napríklad za element <​ArtifactResolutionService ...>): +
- +
-<code xml> +
-<​NameIDFormat>​urn:​oasis:​names:​tc:​SAML:​2.0:​nameid-format:​persistent</​NameIDFormat>​ +
-</​code>​ +
- +
-Vygenerujeme nový WAR súbor a reľtartujeme Jetty: +
- +
-<​code>​ +
-/​opt/​shibboleth-idp/​bin/​build.sh +
- +
-systemctl restart jetty +
-</​code>​ +
- +
-===== Úprava prihlasovacej stránky ===== +
- +
-> TODO+
  • install-idp.txt
  • Posledná úprava: 2019/07/23 21:12