Let’s Encrypt mit Tomcat (z.B. für Atlassian Produkte)

Vor ca. einer Woche habe ich alle installierten Java Tomcat Instanzen (größtenteils von Atlassian Produkten wie Jira, Bitbucket Server, Bamboo und Confluence aber auch Sonatype Nexus und SonarQube) von StartSSL auf Let’s Encrypt umzustellen. Dabei automatisiere ich das Zertifikat Deployment und Update um die Zertifikate automatisiert über einen Cronjob zu aktualisieren.

Der Aktualisierungsvorgang läuft wie folgt ab:

  1. Stoppen der Prozesse
  2. Starten eines Python HTTP Servers auf der IP und dem Port des Dienstes für einen temporären Ordner
  3. Über certbot ein neues Zertifikat beantragen
  4. Python Webserver beenden
  5. Zertifikat umwandeln
  6. Prozesse wieder starten

Und hier mal eine abgespeckte Version des Scriptes:

rm -Rf /tmp/sslatlassian &> /dev/null
mkdir /tmp/sslatlassian

# Stop processes
service jira stop
kill -9 `ps aux | grep jira | grep java | awk '{ print $2 }'` 2> /dev/null

# Start Webserver
cd /tmp/sslatlassian
python -c 'import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(("[IP]", 80), shs.SimpleHTTPRequestHandler).serve_forever()' &
PIDJIRAWS=$!

# Request certificates
/certbot/certbot-auto certonly --agree-tos --renew-by-default -c /etc/letsencrypt.conf/atlassian/jira.conf

# Stop Webserver
kill $PIDJIRAWS
sleep 0.5
kill -9 $PIDJIRAWS &> /dev/null

# Update certificate: Jira
rm /etc/letsencrypt.conf/atlassian/jira.keystore &> /dev/null
openssl rsa -in /etc/letsencrypt/live/[DOMAIN]/privkey.pem -des -out /etc/letsencrypt.conf/atlassian/jira.priv.pem -passout pass:changeit
openssl pkcs12 -export -inkey /etc/letsencrypt.conf/atlassian/jira.priv.pem -in /etc/letsencrypt/live/[DOMAIN]/fullchain.pem -out /etc/letsencrypt.conf/atlassian/jira.keystore -passin pass:changeit -passout pass:changeit

# Start processes
service jira start

Die jira.conf für den certbot sieht wie folgt aus:

rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = [EMAIL]
domains = [DOMAINS]
authenticator = webroot
webroot-path = /tmp/sslatlassian

Anschließend laufen die Dienste mit einem validen SSL Zertifikat von Let’s Encrypt.

Für die Ersteinrichtung:

Zu Beginn muss der Tomcat korrekt für SSL konfiguriert werden. Hierzu muss in der server.xml folgender Connector erstellt werden. Wichtig hierbei sind die keystoreFile und keystorePass Attribute:

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" address="[IP]"
              maxHttpHeaderSize="8192" SSLEnabled="true"
              maxThreads="150" minSpareThreads="25"
              enableLookups="false" disableUploadTimeout="true"
              acceptCount="100" scheme="https" secure="true"
              clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" useBodyEncodingForURI="true"
              ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
              keystoreFile="/etc/letsencrypt.conf/atlassian/jira.keystore"
              keystorePass="changeit" keystoreType="PKCS12" />

31 Mai

by 

Leave a reply

Created with Snap