Quantcast
Channel: 2Axels-Company
Viewing all articles
Browse latest Browse all 23

Automatically renew certificates issued with the certbot-auto script-framework

$
0
0

Die mit Letsencrypt erstellten Zertifikate haben per üblicherweise eine Laufzeit von 90 Tagen. Dies bedeutet natürlich, dass diese auf Grund ihrer relativ kurzen Laufzeit sehr schnell wieder ablaufen. Hier macht es keinen Sinn, zu versuchen, die Ablaufdaten der Zertifikate manuell überwachen zu wollen.

Der sinnvollste und einzig valide Weg ist daher die Überwachung und Erneuerung der Zertifikate per Cron zu automatisieren.

Hier möchte ich daher jetzt meinen Weg darstellen, wie ich die automatischen Überwachung und Erneuerung der Zertifikate umgesetzt habe.

Dafür habe ich mir 2 Bash-Scripts geschrieben, da mir die im Internet verfügbaren Lösungen alle nicht so recht gefallen haben.

Folgendes Script ruft das certbot-auto Script auf und erneuert die Zertifikate, falls notwendig. Über den Parameter „CERTBOT_PARAM“ kann man noch steuern, ob das certbot script wenig, oder gar keine Rückmeldung geben soll. Die Details dazu bitte in der Anleitung zu Letsencrypt nachlesen. Wenn ein Zertifikat erneuert wurde, dann wird der sog. „Renew-Hook“ ausgeführt. Hier in diesem Fall auch ein selbstgeschriebenes Script, welches mir dann eine Mail sendet, dass Zertifikate erneuert worden sind.

#!/bin/bash
#
# und man kann den Renew automatisieren. Hierzu habe ich folgende Zeile in meine Crontab eingetragen:
# 0       0       *       *       *       /usr/bin/certbot renew -q --post-hook "/usr/sbin/service apache2 restart"
# 
# Es wird also täglich geprüft, ob Zertifikate erneuert werden müssen und falls ja, wird ein Renew durchgeführt. Ist das Ablaufdatum noch zu weit entfernt, „verweigert“ der certbot seinen Dienst und tut nichts. -q gibt dem Client die Anweisung, nur eine Rückmeldung auszugeben, sofern Fehler beim Renew aufgetreten sind.
# 
# Script zum erneuern der Zertifikate als cron-Job:
LOGFILE="/var/log/letsencrypt/certbot-renew.log"
SCRIPTPATH="$( dirname $0 )"
SCRIPTNAME="$( basename $0 )"
CERTBOT_PATH="/opt/letsencrypt/"
CERTBOT_SCRIPT="certbot-auto"
CERTBOT_PARAM="--no-self-upgrade"
#CERTBOT_PARAM="--no-self-upgrade --quiet"
#CERTBOT_PARAM="--no-self-upgrade --quiet --dry-run"
MAILTO="mail@example.de"
RENEW_HOOK_SCRIPT="cron_certificate_renew-hook_script_apache-restart_mail.bash"

if [ $UID -eq 0 ]
then
   : # everything ok, script was called with root/sudo priviledges
else
   echo -e "\n\nPlease call this script with sudo $0 !!\n"
   echo -e "if you call this this with the \"letsencrypt\" parameter you have to use sudo or should be \"root\"\n\n"
   exit 1
fi


touch $LOGFILE
cd $CERTBOT_PATH
echo -e "\n-------------------------------------------------\n" >> $LOGFILE
echo -e "\nStarting certificate renewal at $(date +"%Y-%m-%d-%H-%M")" >> $LOGFILE

./certbot-auto $CERTBOT_PARAM renew --renew-hook $SCRIPTPATH/$RENEW_HOOK_SCRIPT >> $LOGFILE 2>&1
echo -e "\nEnding certificate renewal at $(date +"%Y-%m-%d-%H-%M")" >> $LOGFILE
echo -e "\n-------------------------------------------------\n" >> $LOGFILE
exit 0

 

Hier kommt noch das Script für den Renew-Hook:

#!/bin/bash
#
# und man kann den Renew automatisieren. Hierzu habe ich folgende Zeile in meine Crontab eingetragen:
# 0       0       *       *       *       /usr/bin/certbot renew -q --post-hook "/usr/sbin/service apache2 restart"
# 
# Es wird also täglich geprüft, ob Zertifikate erneuert werden müssen und falls ja, wird ein Renew durchgeführt. Ist das Ablaufdatum noch zu weit entfernt, „verweigert“ der certbot seinen Dienst und tut nichts. -q gibt dem Client die Anweisung, nur eine Rückmeldung auszugeben, sofern Fehler beim Renew aufgetreten sind.
# 
# Script zum erneuern der Zertifikate als cron-Job:
LOGFILE="/var/log/letsencrypt/certbot-renew.log"
MAILTO="mail@example.de"
MAILFROM="mail@example.de"

touch $LOGFILE
/usr/sbin/service apache2 reload >> $LOGFILE 2>&1
#mail -a "From: $MAILFROM" -E -s "$HOST: CERTBOT Certificate Renewals" $MAILTO < $LOGFILE
# das setzen des Mailfrom-Headers hat bei mir noch nicht richtig funktioniert!
mail -E -s "VM $HOSTNAME: CERTBOT Certificate Renewals" $MAILTO < $LOGFILE
exit 0

Dazu kommen nun noch die Konfigurationsfiles für den Cronjob und die Logrotation:

#!/bin/bash
# copy the content of this file to:
# /etc/cron.d/certbot-renew_certificates

#* * * * * Command to be executed
#- - - - -
#| | | | |
#| | | | +----- Day of week (0-6)
#| | | +------- Month (1 - 12)
#| | +--------- Day of month (1 - 31)
#| +----------- Hour (0 - 23)
#+------------- Min (0 - 59)

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/user/bin:/opt/letsencrypt
MAILTO=mail@example.de

00 05 * * *     root    /home/user/bin/cron_certificate_renew.bash

#EOF

# copy the content of this file to:
# /etc/logrotate.d/certbot-renew-log
/var/log/letsencrypt/certbot-renew.log {
        daily
        missingok
        rotate 95
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
}

Dieses Setup funktioniert bei mir bisher prima. Ich bekomme nur eine Mail, wenn ein Zertifikat erneuert worden ist. Klar, die Ausgabe aus dem Log kann man noch verbessern. Bisher habe ich aber dazu noch keine Zeit gefunden. Mir ging es mit dieser Artikelreihe hier darum, einmal exemplarisch zu zeigen, wie Zertifikate mit Letsencrypt komplett implementiert werden können. Dieser Artikel ist vorerst der Abschluß dieser Reihe, da nun alle wichtigen Themen behandelt worden sind.

Später werde ich noch einmal einen Artikel schreiben, wie Letsencrypt z.B. per Cron aktialisiert werden kann, wenn man es, so wie ich, nicht aus den Paketquellen installiert hat.

Folgende Artikel gehören zu dieser Reihe der Implementierung von Letsencrypt Zertifikaten:
————————————————————

Monitoring the certificate lifetime data

LetsEncrypt server certificates setup for Apache Webserver on Debian

Requesting certificates with certbot-auto and configuring the apache webserver

Revoking and deleting certificates with the certbot-auto script framework

Automatically renew certificates issued with the certbot-auto script-framework

 


Viewing all articles
Browse latest Browse all 23