Let’s encrypt: Zertifikat automatisch erneuern

Im vorigen Beitrag habe ich für diesen Blog ein Zertifikat von Let’s encrypt! erstellt. Dieses ist 3 Monate gültig. Es ist vorgesehen, dass das Erneuern des Zertifikats automatisch passiert.

Konkret werde ich einen Cronjob erstellen, der monatlich ein neues Zertifikat mit Hilfe des “letsencrypt-auto” Python-Script bezieht.

Konfiguration

Um mir eine Menge Kommandozeilenoptionen zu ersparen, erstelle ich eine Konfigurationsdatei /etc/letsencrypt/cli.ini, die meine Standardwerte enthält:

rsa-key-size = 4096
text
redirect
renew-by-default
agree-tos 
email = meine.email@adresse.at

Hier sind die Parameter kurz erklärt:

rsa-key-size
entweder 2048 (Standard) oder sicherer mit 4096 Bit. Ich möchte meine Zertifikate mit 4096 Bit RSA erstellen.

text
nur im Text-Modus starten (ohne Menüführung). Schließlich soll der Client automatisch im Hintergrund funktionieren.

redirect
ich wurde immer gefragt:

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Um diese Frage vorab zu beantworten, fügt man entweder die CLI-Option “–redirect” an, oder eben in der cli.ini den Ausdruck “redirect”. Damit wird die Option 2 gewählt: make all requests redirect to secure HTTPS access.

renew-by-default
Erneuert das Zertifikat standardmäßig.

agree-tos
Damit stimmt man den Regeln von let’s encrypt! zu. Schließlich wollen wir den Vorgang ja per Cronjob automatisieren und nicht die Regeln manuell bestätigen müssen.

email
Die Email-Adresse, mit der ich bei let’s encrypt! registiert bin.

Testlauf

Zuerst muss ich das Kommando testen:

./letsencrypt-auto -c /etc/letsencrypt/cli.ini -d stefan.schultheis.at

Es funktioniert:

letsencrypt-headless

Cronjob

Um den Job am 20. des Monats um 6:10 auszuführen, habe ich als User root in der Datei /etc/crontab folgenden Eintrag erstellt:

$ sudo vi /etc/crontab

10 6   20 * *   root    /home/stefan/letsencrypt/letsencrypt-auto -c /etc/letsencrypt/cli.ini -d stefan.schultheis.at

Der Cron-Daemon muss die Änderung noch neu laden:

$ sudo service cron reload

Damit bekomme ich jedes Monat am 20. Tag das Zertifikat erneuert. Da derzeit das Zertifikat für 90 Tage gültig ist, bin ich damit auf der sicheren Seite und habe immer ein Zertifikat, das maximal 31 Tage alt ist.

5 Gedanken zu „Let’s encrypt: Zertifikat automatisch erneuern“

  1. Hallo,

    VIELEN Dank für diese einfach geschriebene Anleitung. Ich habe auf bei der letsencrypt-community eine ganz nette Verbesserung für das Script aufgeschnappt.

    “I changed my cron file routine for letsencrypt ssl certificate auto renewal to check certificate expiry date every 9 days and run auto renewal only if certificate expiry date is less than 30 days. This will ensure if auto renewal fails for some reason on either side, that there’s 29/9 = ~ 3 more chances for auto renewal of ssl certificate :smile:”

    Leider bin ich ganz und gar kein Linux- / Srciptprofi. Vielleicht magst du diese Idee ja noch in das Script einbauen? Macht sicherlich Sinn und ICH würde mich freuen 🙂

    LG
    Niko

    1. Hallo Niko,

      danke für deine Rückmeldung und den Vorschlag!

      Ich muss mir das überlegen – im Moment ist mir nicht klar, wie ich am besten in einem Shellscript abfrage, wie lange das Zertifikat gültig ist…

      Die Idee find ich super! Falls ich demnächst dazukomme, stell’ ich’s hier online.

      LgS

  2. Hallo,

    nach Upgrades von Ubuntu 16.04 auf Ubuntu 18.04 funktioniert der certbot nicht mehr. Die einfachste Lösung ist umzusteigen auf certbot via PPA:
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt update
    sudo apt install python-certbot-apache

    Danach stelle ich den Cronjob um und führe /usr/bin/certbot aus. Die übrigen Parameter bleiben gleich, auch /etc/letsencrypt und die cli.ini greife ich nicht an. Damit funktioniert’s in Zukunft wieder von selbst.

Schreibe einen Kommentar zu stefan Antworten abbrechen