Tomcat Webserver & Let's Encrypt Zertifikate
Information
- Um ein Let's Encrypt-Zertifikat bei Tomcat zu hinterlegen, muss das Zertifikat in den Tomcat Keystore importiert werden.
Vorgehensweise
Manuell
Vorgehensweise
Automatisch
Ein Bash Script hierfür sieht zum Beispiel so aus:
#!/usr/bin/env bash
set -o nounset
# Verzeichnis der Let's Encrypt Zertifikate
DIR=/path/to/cert-files
# Verzeichnis zum Zwischenspeichern der Keystore-File
TEMPDIR=/tmp
# Verzeichnis des Tomcat Keystores
KEY=/path/to/tomcat-keystore
# Log File
LOG=renew.log
# Zusätzliches Log File mit der Ausgabe vom certbot
TEMP_LOG=temp_renew.log
{
echo "----------------------------------$(date)----------------------------------"
echo "Stopping Tomcat.."
systemctl stop tomcat.service
echo "Renewing Certificates.."
certbot certonly -n --standalone -d [hostname] |& tee "${TEMP_LOG}"
if grep -q Congratulations "${TEMP_LOG}"; then
echo "Changing Directory to ${DIR}"
pushd "${DIR}" > /dev/null
echo "Creating new Keystore.."
openssl pkcs12 -export -in "fullchain.pem" -inkey "privkey.pem" -out "${TEMPDIR}/keystorefile" -name tomcat -CAfile "chain.pem" -caname root -passout pass:changeit
popd > /dev/null
if [ -f "${KEY}" ]; then
echo "Keystore ${KEY} already exists. Deleting.."
rm "${KEY}"
fi
echo "Changing Directory to ${TEMPDIR}"
pushd "${TEMPDIR}" > /dev/null
echo "Importing new Keystore into Tomcat.."
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore "${KEY}" -srckeystore "${TEMPDIR}/keystorefile" -srcstoretype PKCS12 -srcstorepass changeit -alias tomcat
popd > /dev/null
echo "Cleanup.."
rm "${TEMPDIR}/keystorefile"
fi
echo "Starting Tomcat.."
systemctl start tomcat.service
echo "----------------------------------$(date)----------------------------------"
} |& tee -a "${LOG}"