====== Inštalácia a nastavenie Jetty ======
Pred inštaláciou a nastavením Jetty musíme mať funkčnú a nastavenú databázu.
Inštalácia Jetty:
apt install --no-install-recommends jetty9
Ďalej nastavíme premennú "JAVA_HOME":
eval $(echo "export JAVA_HOME=/usr" | tee -a /root/.bashrc)
Môžeme skontrolovať nastavenie premennej a verziu java:
echo $JAVA_HOME
java -version
Vytvoríme súbor idp.mod - modul pre Shibboleth IdP, ktorý obsahuje potrebné závislosti pre funkčnosť IdP.
nano /usr/share/jetty9/modules/idp.mod
Obsah súboru:
[description]
Shibboleth IdP
[depend]
annotations
deploy
ext
http
http2
https
jsp
jstl
plus
requestlog
resources
rewrite
server
servlets
ssl
[files]
tmp/
Pre webový server budeme potrebovať verejný certifikát vydaný verejnou certifikačnou autoritou (ďalej CA).
Vygenerujeme si žiadosť o certifikát (nachádzame sa v domovskom adresári používateľa "root"):
Vytvoríme adresár, v ktorom budeme následne pracovať:
mkdir ssl_cert
cd ssl_cert
Pre vygenerovanie certificate request použijeme príkaz:
openssl req -new -newkey rsa:2048 -nodes -keyout demoidp.key -out demoidp.csr
Spustí sa proces:
Generating a RSA private key
.....................+++++
..........................................+++++
writing new private key to 'demoidp.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
V adresári "/root/ssl_cert" by sa mali nachádzať vygenerované súbory:
> demoidp.csr
> demoidp.key
Súbor demoidp.csr je určený pre verejnú CA, ktorá následne po jeho obdržaní vygeneruje SSL certifikát.
Certifikát, ktorý sme dostali od verejnej CA premenujeme na: "demoidp.crt".
V adresári "/root/ssl_cert" máme spolu sústredené súbory:
> demoidp.csr
> demoidp.key
> demoidp.crt - skopírovaný a premenovaný certifikát od verejnej CA
> intermediate.crt - medziľahlý certifikát od verejnej CA doručený spolu s SSL certifikátom (koreňový certifikát verejnej CA nepotrebujeme)
V prípade, že verejná CA používa medziľahlý certifikát potrebujeme ho zlúčiť s SSL certifikátom vygenerovaným pre webový server:
cat demoidp.crt intermediate.crt > jetty-cert.txt
Vygenerujeme si heslo, ktore budeme potrebovať v ďalších krokoch (heslo si poznačíme):
openssl rand -hex 20
Vytvorený súbor "jetty-cert.txt" ďalej prevedieme do formátu PKCS#12.
Budeme vyzvaný na zadanie hesla - zadáme heslo, ktoré sme si vygenerovali:
openssl pkcs12 -export -inkey demoidp.key -in jetty-cert.txt -out jetty.pkcs12
V adresári "/root/ssl_cert" by sa mali spolu nachádzať súbory:
> demoidp.csr
> demoidp.key
> demoidp.crt
> intermediate.crt
> jetty-cert.txt
> jetty.pkcs12
Vygenerujeme súbor keystore, ktorý pomocou príkazu umiestnime do adresára /etc/jetty9.
Počas procesu generovania keystore zadáme vo všetkých troch prípadoch heslo, ktoré sme si predtým vygenerovali a už ho použili v prípade vytvárania súboru vo formáte PKCS#12.
keytool -importkeystore -srckeystore jetty.pkcs12 \
-srcstoretype PKCS12 -destkeystore /etc/jetty9/keystore
Proces prebieha nasledovne:
Importing keystore jetty.pkcs12 to /etc/jetty9/keystore...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Nastavíme potrebné oprávnenia k súboru keystore:
chmod 640 /etc/jetty9/keystore
chgrp jetty /etc/jetty9/keystore
V adresári /etc/jetty9/start.d vytvoríme konfiguračný súbor ''idp.ini'' .
nano /etc/jetty9/start.d/idp.ini
S obsahom:
# ---------------------------------------
# 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:+UseG1GC
# Maximum amount of memory that Jetty may use
-Xmx1500m
# Keystore password
jetty.sslContext.keyStorePassword=vygenerované heslo
# Truststore password
jetty.sslContext.trustStorePassword=vygenerované heslo
# KeyManager password
jetty.sslContext.keyManagerPassword=vygenerované heslo
# 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
# Set max age in seconds for a Strict-Transport-Security response header
jetty.ssl.stsMaxAgeSeconds=15768000
# Hide Jetty version
jetty.httpConfig.sendServerVersion=false
etc/tweak-ssl.xml
A doplníme vygenerované heslo, ktoré sme už použili v predchádzajúcich krokoch a poznačili sme si ho.
Pozrite tiež:
[[https://www.safeid.sk/install:idp:idp:java-heap|úprava limitu pre Java heap]]
V adresári /etc/jetty9 vytvoríme nový súbor ''tweak-ssl.xml'' . Budú v ňom definované zakázané a povolené šifry a protokoly:
nano /etc/jetty9/tweak-ssl.xml
- .*DES.*
- .*DSS.*
- .*MD5.*
- .*NULL.*
- .*RC4.*
- .*_RSA_.*MD5$
- .*_RSA_.*SHA$
- .*_RSA_.*SHA1$
- SSL
- SSLv2
- SSLv2Hello
- SSLv3
- TLS_ECDHE.*
- TLS_AES.*
- TLS_CHACHA20.*
V adresári /var/lib/jetty9/webapps vytvoríme konfiguračný súbor ''idp.xml'' potrebný pre beh Shibboleth IdP.
nano /var/lib/jetty9/webapps/idp.xml
S obsahom:
false
false
true
Aby sme predišli hláseniam aplikácie Jetty, že používať adresár start.d/ a súbor start.ini súčasne je zastaralé, zmažeme súbor start.ini spolu s jeho symbolickým odkazom:
rm /usr/share/jetty9/start.ini /etc/jetty9/start.ini
V adresári /var/lib/jetty9/webapps/root odstránime predvolenú stránku a do súboru *index.jsp* uvedieme presmerovanie na stránku našej organizácie.
Zmeniť www.example.org na domovskú adresu svojej organizácie.
rm /var/lib/jetty9/webapps/root/*
echo '<% response.sendRedirect("https://www.example.org"); %>' > \
/var/lib/jetty9/webapps/root/index.jsp
Pre správnu funkčnosť potrebuje Jetty pridať link (vytvoriť symbolický odkaz) na JDBC konektor/mariadb-java-client.jar do zložky s externými knižnicami /usr/share/jetty9/lib/ext:
ln -s /usr/share/java/mariadb-java-client.jar \
/usr/share/jetty9/lib/ext/mariadb-java-client.jar
Pre zvýšenie bezpečnosti používateľov, ktorí budú zadávať do prihlasovacej stránky svoje mená a heslá je vhodné vytvoriť nové bezpečnostné opatrenie pomocou súboru ''jetty-rewrite.xml''.
V prípade problémov s načítaním štýlov alebo obrázkov je potrebné skontrolovať Content-Security-Policy hlavičku.
Najskôr zmažeme pôvodný súbor:
rm /etc/jetty9/jetty-rewrite.xml
Vytvoríme nový súbor:
nano /etc/jetty9/jetty-rewrite.xml
S obsahom:
- REQUEST
- ASYNC
*
X-Content-Type-Options
nosniff
*
X-Xss-Protection
1; mode=block
*
Content-Security-Policy
default-src 'self'; style-src 'self'; script-src 'self' 'unsafe-inline'; img-src 'self'; font-src 'self'
*
Referrer-Policy
no-referrer-when-downgrade
Týmto krokom je hotová konfigurácia pre Jetty.
Reštartujeme Jetty:
systemctl restart jetty9
Kontrolu sieťových spojeni pre porty 80/HTTP a 443/HTTPS urobíme pomocou príkazu:
ss -tlpn | fgrep java
Mali by sme dostať výsledok:
LISTEN 0 50 [::ffff:127.0.0.1]:80 *:* users:(("java",pid=945,fd=59))
LISTEN 0 50 *:443 *:* users:(("java",pid=945,fd=51))
Test funkčnosti presmerovania:
wget -S -O/dev/null http://localhost
wget -S -O/dev/null https://`hostname -f`
Môžete pokračovať [[install:idp:instalacia_a_nastavenie_shibboleth_idp|Inštalácia a nastavenie Shibboleth IdP]]