SSL/TLS-Zertifizierung mit cron automatisieren – 1

Im letzen Beitrag wurde SSL-Zertifizierung durch Let’s encrypt erläutert. Weil das Zertifikat jedoch nur 90 Tage lang hält, wäre es praktisch dieser Zertifizierungsprozess automatisieren.

Dafür werden ein Paar shell script gebastelt… Es sind folgende 3 shell script geschrieben:

Mit «create_keystore_sample.sh» erstellt man JKS-Keystore. Das shell scritp sieht so aus:

#!/bin/sh 
serverpath="/path/to/Cantaloupe-Ordner"
passA="[Passwort A]"
passB="[Passwort B]"
pempath="/etc/letsencrypt/live/[Domain-Name]"
pkcsname="fullchain_and_key.p12"
keyalias="[Aliasname]"
jksname="MyKeyStore.jks"

cd $pempath

if [ -f $pkcsname ]; then
rm $pkcsname
fi
if [ -f $jksname ]; then
rm $jksname
fi

openssl pkcs12 -export -passout pass:$passA -in $pempath/fullchain.pem -inkey $pempath/privkey.pem -out $pkcsname -name $keyalias

keytool -importkeystore -deststorepass $passA -destkeypass $passB -destkeystore $jksname -srckeystore $pkcsname -srcstoretype PKCS12 -srcstorepass $passA -alias $keyalias

chmod 660 $pkcsname
chmod 660 $jksname

#Falls man jks-keystore-File in den Cantaloupe-Ordner bewegen möchte, soll man das #-Zeichen der nächsten Zeile löschen.
#mv -f $jksname $serverpath

Passwörter, Passwort A und B, sollen den Passwörter entsprechen, die im Datei «cantaloupe.properties» eingegeben sind. Dort in cantaloupe.properties sind zwei Felder, «https.key_store_password» und «https.key_password».

Das zweite shell script steht dafür, dass cantaloupe-imageserver nach der Erneuerung des Zertifikats einmal gestoppt und wiedergestartet wird.

#!/bin/bash

 # für stoppen 
path="/path/to/Cantaloupe-Ordner"
targetpath="$path/cantaloupe-4.0.2.war" 

cd $path

echo "Stop $targetpath server." 
pkill -f cantaloupe 

# für starten 
echo "restart $targetpath server." 

nohup java -Dcantaloupe.config=$path/cantaloupe.properties -Xmx3g -jar $targetpath &

Mit pkill-Befel stoppt der Prozess, dessen Name «cantaloupe» enthält. Ich habe hier max. 3GB dem heap space von JVM zugeteilt. Je nach Bedarf sollte man mehr Speicherkapazität zuweisen. (Hier siehe auch Cantaloupe-Hilfe.)

Das letzte shell script fasst die beiden Prozesse zusammen, und vor diesen zwei Prozesse ist «certbot-auto renew»-Befehl hineingeschoben:

#!/bin/sh 
path="/Cantaloupe"
path2='dirname $0'

cd $path2 

/usr/bin/certbot-auto renew --standalone --quiet 

$path/create_keystore.sh 
$path/restart.sh

Hier habe ich mir einen «Cantaloupe»-Ordner vorgestellt, der das war-File (z.B. cantaloupe-4.0.2.war) und all die oben genannten shell script-Daten beinhaltet.

Die shell script-Daten sollen nun für Ausführung freigeschaltet sein (z.B. mit «chmod 755»).

Um zu prüfen, ob dies alles funktioniert, kann man in der Zeile des certbot-Befehls noch die Option «–force-renewal» hinzufügen:

/usr/bin/certbot-auto renew --force-renewal --standalone

In createKey_and_restart_test_sample.sh ist die ganze Test-Datei zu sehen. Weil root-Berechtigung für certbot-auto-Befehl notwendig ist, soll man Test-Befehl so formulieren:

$ sudo ./createKey_and_restart_test_sample.sh

Wenn dieser Test-Befehl problemlos läuft, muss man nur noch den Prozess durch «cron» automatisieren…