Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Jetty jako kontener Shibboleth

Z MAN-HA wiki

Jetty to zalecany kontener dla Shibboleth IdP.

Instalacja Jetty 9

Aktualna wersja to Jetty jetty-distribution-9.4.39.v20210325.tar.gz


Jetty 9.4.39

Pobieramy dystrybucję Jetty 9.4.39 ze strony https://www.eclipse.org/jetty/download.html, np.

wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.39.v20210325/jetty-distribution-9.4.39.v20210325.tar.gz

Następnie rozpakowujemy pakiet i umieszczamy w katalogu docelowym instalacji, np. /opt/jetty

tar xfvz jetty-distribution-9.4.39.v20210325.tar.gz 
mv jetty-distribution-9.4.39.v20210325 /opt/jetty
ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty

Tworzymy plik /etc/default/jetty i wpisujemy w nim zmienne środowiskowe jetty:

JETTY_HOME=/opt/jetty
JETTY_BASE=/opt/jetty-apps
JETTY_USER=root
JETTY_PORT=80
JETTY_HOST=.....
JETTY_LOGS=/opt/jetty/logs/
TMPDIR=/opt/jetty-apps/tmp

Ustawienie JETTY_BASE oznacza, że aplikacje Jetty będą umieszczane w katalogu /opt/jetty-apps.Inicjujemy ten katalog:

mkdir /opt/jetty-apps
cd /opt/jetty-apps
java -jar /opt/jetty/start.jar --create-startd --add-to-start=http,https,console-capture,deploy,requestlog, \
                                               jsp,jstl,plus,servlets,annotations,ext,resources,ssl

i tworzymy katalog tmp:

mkdir tmp

W pliku /opt/jetty-apps/webapps/idp.xml umieszczamy:

<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>
</Configure>

W pliku /opt/jetty-apps/start.d/ssl.ini zmieniamy port na 443:

jetty.ssl.port = 443

oraz wskazujemy plik z certyfikatem stron IdP - plik ten przygotowujemy w formacie PKCS12

jetty.sslContext.keyStorePath=credentials/jetty.p12
jetty.sslContext.trustStorePath=credentials/jetty.p12
jetty.sslContext.keyStorePassword=password1
jetty.sslContext.keyManagerPassword=password1
jetty.sslContext.trustStorePassword=password1
jetty.sslContext.keyStoreType=PKCS12
jetty.sslContext.trustStoreType=PKCS12

W pliku /opt/jetty-apps/start.d/http.ini zmieniamy port na 80:

jetty.http.port=80

Hasła (jetty.sslContext.keyStorePassword, jetty.sslContext.trustStorePassword, jetty.sslContext.keyManagerPassword) można podać otwartym tekstem, można też zastosować przedstawioną na stronie https://wiki.eclipse.org/Jetty/Howto/Secure_Passwords metodę ukrycia hasła w postaci OBF.


Pobieramy bibliotekę https://build.shibboleth.net/nexus/content/repositories/releases/net/shibboleth/utilities/jetty9/jetty9-dta-ssl/1.0.0/jetty9-dta-ssl-1.0.0.jar i kopiujemy ją do katalogu /opt/jetty-apps/lib/ext/.

Konfiguracja SSL/TLS pod kątem wymogów bezpieczeństwa

Należy zadbać o to, byserwer spełniał wymagania bezpieczeństwa dotyczące: stosowanego certyfikatu, obsługiwanych protokołów oraz akceptowanych typów szyfrowania (cipher suites). Przydatnym testem jest strona https://www.ssllabs.com/ssltest/.W pliku /opt/jetty/etc/jetty-ssl-context.xml, w bloku ... modyfikujemy blok ..., który powinien mieć postać:

 
   .*NULL.*
   .*RC4.*
   .*MD5.*
   .*DES.*
   .*DSS.*  
   TLS_DHE_RSA_WITH_AES_128.*
   TLS_DHE_RSA_WITH_AES_256.*

Przygotowanie plików z certyfikatami i kluczami prywatnymi

Pliki z kluczem prywatnym, certyfikatem serwera oraz certyfikatami pośrednimi (pozyskane w czasie generowania certyfikatu serwera np. poprzez usługę PIONIER TCS) należy umieścić w magazynie wskazanym w pliku /opt/jetty-apps/start.d/ssl.ini jako jetty.sslContext.keyStorePath oraz jetty.sslContext.trustStorePath. Jeśli np. certyfikat został wystawiony przez usługę TCS i dysponujemy trzema plikami:

  • server.key
  • server.pem
  • chain.pem

wykonujemy:

cat server.pem chain.pem > jetty-chain.pem
openssl pkcs12 -export -inkey server.key -in jetty-chain.pem -out jetty.p12

Plik p12 (lub jks) przegrywamy do katalogu wskazanego w pliku /opt/jetty-apps/start.d/ssl.ini w wierszach jetty.sslContext.keyStorePath oraz jetty.sslContext.trustStorePath (jest to ten sam plik, ponieważ w jednym pliku mamy zarówno certyfikat serwera jak i certyfikaty wystawców).

Uruchomienie jetty

/etc/init.d/jetty start