Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| cs:tech:idp:jetty [2020/03/27 07:51] – [idp.ini] 9ec128d6c1ed31e124c9d0343d1175613f20f405@einfra.cesnet.cz | cs:tech:idp:jetty [2024/03/27 08:37] (aktuální) – Jan Oppolzer | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== Jetty ====== | ====== Jetty ====== | ||
| - | **Na této stránce se nachází návod, jak do linuxové distribuce Debian nainstalovat Jetty jako servlet kontejner a HTTP server pro potřeby Shibboleth IdP. Před instalací musíme zprovoznit | + | |
| - | + | * [[:cs:tech:idp: | |
| - | ---- | + | |
| - | + | ||
| - | ===== Instalace ===== | + | |
| - | + | ||
| - | //Jetty// nainstalujeme následujícím příkazem: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Instalace Jetty | + | |
| - | apt install --no-install-recommends jetty9 | + | |
| - | </ | + | |
| - | + | ||
| - | Nastavíme proměnnou // | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Nastavení proměnné JAVA_HOME | + | |
| - | eval $(echo " | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Konfigurace ===== | + | |
| - | + | ||
| - | Nakonfigurovat Jetty pro běh Shibboleth IdP je velice triviální, | + | |
| - | + | ||
| - | ==== idp.mod ==== | + | |
| - | + | ||
| - | Vytvoříme si v Jetty tzv. modul pro Shibboleth IdP, který obsahuje veškeré závislosti, | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | < | + | |
| - | [description] | + | |
| - | Shibboleth IdP | + | |
| - | + | ||
| - | [depend] | + | |
| - | annotations | + | |
| - | deploy | + | |
| - | ext | + | |
| - | http | + | |
| - | http2 | + | |
| - | https | + | |
| - | jsp | + | |
| - | jstl | + | |
| - | plus | + | |
| - | requestlog | + | |
| - | resources | + | |
| - | rewrite | + | |
| - | server | + | |
| - | servlets | + | |
| - | ssl | + | |
| - | + | ||
| - | [files] | + | |
| - | tmp/ | + | |
| - | </ | + | |
| - | + | ||
| - | Nejsnáze toho dosáhneme stažením již připraveného souboru: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Stažení souboru idp.mod | + | |
| - | wget -P / | + | |
| - | https:// | + | |
| - | </ | + | |
| - | + | ||
| - | ==== keystore ==== | + | |
| - | + | ||
| - | Pro šifrovanou komunikaci bude IdP využívat TLS certifikát. Ten je možné získat na službě [[https:// | + | |
| - | + | ||
| - | Získaný certifikát (zde označený jako '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Spojení koncového a mezilehlého certifikátu | + | |
| - | cat cert.pem chain.pem > jetty.txt | + | |
| - | </ | + | |
| - | + | ||
| - | Následně si certifikát ('' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Generování nového hesla | + | |
| - | openssl rand -hex 20 | + | |
| - | + | ||
| - | # Převod certifikátu do formátu PKCS#12 | + | |
| - | openssl pkcs12 -export -inkey key.pem -in jetty.txt -out jetty.pkcs12 | + | |
| - | </ | + | |
| - | + | ||
| - | Pak již zbývá jen do adresáře ''/ | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Generování keystore | + | |
| - | keytool -importkeystore -srckeystore jetty.pkcs12 \ | + | |
| - | -srcstoretype PKCS12 -destkeystore / | + | |
| - | + | ||
| - | # Změna práv ke keystoru | + | |
| - | chmod 640 / | + | |
| - | chgrp jetty / | + | |
| - | </ | + | |
| - | + | ||
| - | Heslo, které jsme si vygenerovali pomocí příkazu '' | + | |
| - | + | ||
| - | ==== idp.ini ==== | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | <code ini> | + | |
| - | # --------------------------------------- | + | |
| - | # Module: idp | + | |
| - | # Shibboleth IdP | + | |
| - | # --------------------------------------- | + | |
| - | --module=idp | + | |
| - | + | ||
| - | # Allows setting Java system properties (-Dname=value) | + | |
| - | # and JVM flags (-X, -XX) in this file | + | |
| - | --exec | + | |
| - | + | ||
| - | # Newer garbage collector that reduces memory needed for larger metadata files | + | |
| - | -XX: | + | |
| - | + | ||
| - | # Maximum amount of memory that Jetty may use | + | |
| - | -Xmx1500m | + | |
| - | + | ||
| - | # Keystore password | + | |
| - | jetty.sslContext.keyStorePassword=FIXME | + | |
| - | # Truststore password | + | |
| - | jetty.sslContext.trustStorePassword=FIXME | + | |
| - | # KeyManager password | + | |
| - | jetty.sslContext.keyManagerPassword=FIXME | + | |
| - | + | ||
| - | # HTTP | + | |
| - | jetty.http.host=127.0.0.1 | + | |
| - | jetty.http.port=80 | + | |
| - | + | ||
| - | # HTTPS | + | |
| - | jetty.ssl.host=0.0.0.0 | + | |
| - | jetty.ssl.port=443 | + | |
| - | + | ||
| - | # Disable SSL renegotiation | + | |
| - | jetty.sslContext.renegotiationAllowed=false | + | |
| - | + | ||
| - | # Hide Jetty version | + | |
| - | jetty.httpConfig.sendServerVersion=false | + | |
| - | + | ||
| - | etc/ | + | |
| - | </ | + | |
| - | + | ||
| - | Opět můžeme stáhnout připravený soubor: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Stažení souboru idp.ini | + | |
| - | wget -P / | + | |
| - | https:// | + | |
| - | </ | + | |
| - | + | ||
| - | V souboru ''/ | + | |
| - | + | ||
| - | < | + | |
| - | jetty.sslContext.keyStorePassword= | + | |
| - | jetty.sslContext.trustStorePassword= ___HESLO___ | + | |
| - | jetty.sslContext.keyManagerPassword= ___HESLO___ | + | |
| - | </ | + | |
| - | + | ||
| - | ==== tweak-ssl.xml ==== | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | <code xml> | + | |
| - | <?xml version=" | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | <!-- Exclude old and unsafe ciphers --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <Array type=" | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- Exclude old and unsafe protocols --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <Array type=" | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- Forward Secrecy --> | + | |
| - | <Set name=" | + | |
| - | <Array type=" | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | Opět můžete použít jíž připravený soubor: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Stažení souboru tweak-ssl.xml | + | |
| - | wget -P /etc/jetty9 \ | + | |
| - | https:// | + | |
| - | </ | + | |
| - | + | ||
| - | ==== idp.xml ==== | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | <code xml> | + | |
| - | <?xml version=" | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | Již připravený soubor si můžete stáhnout: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Stažení souboru idp.xml | + | |
| - | wget -P / | + | |
| - | https:// | + | |
| - | </ | + | |
| - | + | ||
| - | ==== start.ini ==== | + | |
| - | + | ||
| - | Aby si Jetty nestěžovalo, | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Smazání souboru a symbolického odkazu start.ini | + | |
| - | rm / | + | |
| - | </ | + | |
| - | + | ||
| - | ==== index.jsp ==== | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | **Změňte '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Smazání statického webu v Jetty | + | |
| - | rm / | + | |
| - | + | ||
| - | # Vytvoření přesměrování na domovskou stránku | + | |
| - | echo '<% response.sendRedirect(" | + | |
| - | / | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Knihovny ==== | + | |
| - | + | ||
| - | Jetty potřebuje | + | |
| - | + | ||
| - | * commons-dbcp2-2.1.1.jar ([[https:// | + | |
| - | * commons-pool2-2.4.2.jar ([[https:// | + | |
| - | * commons-logging-api-1.1.jar ([[https:// | + | |
| - | * mariadb-java-client.jar (JDBC ovladač pro MariaDB). | + | |
| - | + | ||
| - | Po stažení prvních tří souborů uvedených výše je umístíme na server do adresáře ''/ | + | |
| - | + | ||
| - | === Apache Commons DBCP & Pool === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Přesunutí Apache Commons DBCP2 a Pool2 JAR souborů do Jetty: | + | |
| - | cd /opt | + | |
| - | mv commons-dbcp2-2.1.1.jar \ | + | |
| - | | + | |
| - | | + | |
| - | / | + | |
| - | </ | + | |
| - | + | ||
| - | === JDBC pro MariaDB === | + | |
| - | + | ||
| - | JDBC pro MariaDB jsme nainstalovali v [[mariadb|předchozím krkou]] instalací balíčku '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Vytvoření symbolického odkazu na JDBC | + | |
| - | ln -s / | + | |
| - | / | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Bezpečnost ===== | + | |
| - | + | ||
| - | Tento krok není pro běh IdP nutný, ale je velice vhodný pro zvýšení bezpečnosti uživatelů, | + | |
| - | + | ||
| - | ==== jetty-rewrite.xml ==== | + | |
| - | + | ||
| - | V adresáři ''/ | + | |
| - | + | ||
| - | <WRAP important 100%> | + | |
| - | Zkontrolujte si zejména **Content-Security-Policy** hlavičku! | + | |
| - | + | ||
| - | Pokud se v prohlížeči na IdP nenačtou např. styly nebo obrázky, je to chybějícími záznamy právě v Content-Security-Policy hlavičce. Pokud byste např. chtěli povolit načítání obrázků ze všech [šifrovaných] URL adres (a ne jenom z URL adresy serveru s IdP, čili //' | + | |
| - | + | ||
| - | Používáte-li pro obrázky formát SVG, který v sobě obsahuje definici kaskádových stylů, nezapomeňte do // | + | |
| - | + | ||
| - | //I přes tyto počáteční problémy se však toto bezpečnostní opatření vyplatí, protože webový prohlížeč odmítne uživatelům načíst podstrčené soubory, pokud by se to útočníkovi nějak povedlo.// | + | |
| - | </ | + | |
| - | + | ||
| - | <code xml> | + | |
| - | <?xml version=" | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | + | ||
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | + | ||
| - | <Set name=" | + | |
| - | <Array type=" | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- Strict-Transport-Security --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- X-Content-Type-Options --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- X-Xss-Protection --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- X-Frame-Options --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- Content-Security-Policy --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- Referrer-Policy --> | + | |
| - | <Call name=" | + | |
| - | < | + | |
| - | <New class=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | <Set name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | </ | + | |
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | Jako v předchozích případech, | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Přepsání původního souboru jetty-rewrite.xml novým | + | |
| - | wget -O / | + | |
| - | https:// | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Restart ===== | + | |
| - | + | ||
| - | Konfigurace je hotová, čili můžeme Jetty restartovat: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Restartování Jetty | + | |
| - | systemctl restart jetty9 | + | |
| - | </ | + | |
| - | + | ||
| - | Přesvědčíme se, že vše funguje: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Kontrola síťových spojení | + | |
| - | ss -tlpn | fgrep java | + | |
| - | </ | + | |
| - | + | ||
| - | Měli bychom vidět, že port '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Kontrola síťových spojení | + | |
| - | LISTEN | + | |
| - | LISTEN | + | |
| - | </ | + | |
| - | + | ||
| - | Vyzkoušíme, | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Vyzkoušení přesměrování | + | |
| - | wget -S -O/dev/null http:// | + | |
| - | wget -S -O/dev/null https:// | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | **Máme-li nainstalováno | + | |