Zertifikate von Let's Encrypt automatisch erneuern

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Die kostenlosen TLS-Zertifikate von Let's Encrypt laufen schnell ab und machen deshalb viel Arbeit. Deshalb ist es praktisch, die Schlüssel automatisch erneuern zu lassen. 

Seit vor knapp zwei Jahren Let's Encrypt (LE) mit dem Ziel gestartet ist, möglichst viele Websites mit kostenlosen SSL/TLS-Zertifikaten zu versorgen, hat sich das Projekt zu einer Erfolgsgeschichte entwickelt: Bereits Ende Januar dieses Jahres hat Let's Encrypt das hundertmillionste Zertifikat ausgegeben. Seit dem Start von Let's Encrypt ist der Anteil TLS-verschlüsselter Websites von 40 Prozent auf 58 Prozent gestiegen.  

In einem anderen ADMIN-Tipp haben wir bereits gezeigt, wie sich LE-Zertifikate mit Apache, Nginx und HAProxy nutzen lassen. Weil die Zertifikate nur 90 Tage gültig sind, werden LE-Anwender mit E-Mails bombardiert, die regelmäßig zur Verlängerung auffordern. Um sich dabei Handarbeit zu sparen, empfiehlt es sich, die Zertifikate per Cronjob automatisch zu erneuern.

Sind die Zerfifikate einmal eingerichtet, genügt es "certbot renew" aufzurufen, um automatisch alle Zertifikate zu erneuern, die zur Verlängerung anstehen. Den entsprechenden Aufruf des Tools können Sie beispielsweise in "/etc/cron.d/certbot" hinterlegen. Wer certbot etwa auf Ubuntu 16.04 mit dem Paketmanager installiert hat, findet entsprechende Cronjobs schon fertig konfiguriert.

Bei der automatischen Verlängerung gibt es einige Dinge zu bedenken. So bietet der certbot mehrere Mechanismen, um eine Website als rechtmäßigen Besitzer eines Zertifikats zu verifizieren. Möglich es etwa, dass das Tool selbst einen Webserver startet, der von den LE-Servern kontaktiert wird. Dazu dürfte allerdings kein anderer Prozess auf dem HTTP-Port laufen; Apache und Co. müssten also beendet werden. Besser ist es, den Authenticator namens "webroot" zu verwenden, der im Unterverzeichnis ".well-known" des Webservers eine Datei zur Authentifizierung ablegt. Die Konfiguration der einzelnen Domains für das Renewal sind im Verzeichnis "/etc/letsencrypt/renewal/" zu finden. Wenn dort beispielsweise der Authenticator "standalone" steht, können Sie die Domain manuell für die Webroot-Authentifizierung einrichten, indem Sie die Konfiguration folgendermaßen ändern:

# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
webroot_path = /var/www/html
account = abcdef12356abcdef123456cdfa

Den "webroot_path" passen Sie für den jeweiligen VHost entsprechend an. Damit dürfte die automatischer Erneuerung der LE-Zertifikate in den meisten Fällen gelingen. Wer allerdings HAProxy verwendet, muss die Zertifikate nach dem Herunterladen noch weiterverarbeiten, um sie in das erwartete Format zu bringen (siehe . Um dies zu tun, bietet certbot sogenannte Hooks, die es erlauben, vor oder nach dem Herunterladen eigene Scripts auszuführen. Hier klinken Sie das folgende Skript ein, das die Files zu einem HAProxy-Zertifikat zusammenfügt: 

#!/bin/bash
cd $RENEWED_LINEAGE
cat fullchain.pem privkey.pem > haproxy.pem
cd -

Die Variable RENEWED_LINEAGE wird vom certbot an das Post-Script übergeben und enthält das Verzeichnis der entsprechenden Website, etwa "/etc/letsencrypt/live/www.admin-magazin.de/". In der LE-Konfiguration binden Sie das obige Skript, das Sie beispielsweise als "/usr/sbin/merge-le-certs" speichern, so ein: 

[renewalparams]
...
post_hook = service haproxy restart
renew_hook = /usr/sbin/merge-le-certs
...

Hier werden zwei Hooks verwendet: Der Renew-Hook wird für jedes erneuerte Zertifikate aufgerufen. Der Post-Hook, der hier den HAProxy-Server neu startet, läuft nach dem Ende des Renewal ab, aber nur einmal, wenn mehrere Domains den gleichen Post-Hook verwenden. Alternativ zur Konfiguration in den Domain-Files können Sie die Hooks auch beim Aufruf des certbot angeben, wie es etwa der Ubuntu-Cronjob macht:

certbot -q renew --pre-hook '/bin/run-parts /etc/letsencrypt/pre-hook.d/' --post-hook '/bin/run-parts /etc/letsencrypt/post-hook.d/' --renew-hook '/bin/run-parts /etc/letsencrypt/renew-hook.d/'
30.08.2017
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023