Rozdiely
Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.
| install-idp-jetty [23. 07. 2019 15:55] – vytvorené jsilaci@umb.sk | install-idp-jetty [Unknown date] (aktuálne) – odstránené - externá úprava (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Riadok 1: | Riadok 1: | ||
| - | ===== 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 /opt/jetty | ||
| - | </ | ||
| - | |||
| - | 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 /opt/jetty | ||
| - | 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=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | |||
| - | |||
| - | <!-- Set DispatcherTypes | ||
| - | <Set name=" | ||
| - | <Array type=" | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <New class=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | <Set name=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | <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=" | ||
| - | <Arg> | ||
| - | <Array type=" | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <!-- Zakázání nedůvěryhodných protokolů --> | ||
| - | <Call name=" | ||
| - | <Arg> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <!-- 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 /opt/jetty | ||
| - | </ | ||
| - | |||
| - | 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: | ||
| - | |||
| - | < | ||
| - | / | ||
| - | </ | ||