Mit Certbot lassen sich die Einrichtung von Let’s Encrypt Zertifikaten und die entsprechende Konfiguration des Webservers automatisieren. Unter Debian wird nach der Installation des Pakets certbot (vorzugsweise aus den Backports) bei Vorhandensein von Systemd ein Timer eingerichtet, der zweimal täglich überprüft, ob auf dem Server ein Zertifikat in nächster Zeit abläuft, und dieses gegebenenfalls erneuert. Der Timer sollte in der Ausgabe von „systemctl list-timers“ enthalten sein:
# systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES [...] Thu 2018-11-15 20:15:00 CET 4h 16min left Thu 2018-11-15 08:55:03 CET 7h ago certbot.timer certbot.service [...]
Falls Systemd nicht installiert ist, übernimmt ein Cronjob in /etc/cron.d/certbot die Überprüfung. Ähnlich wird es sich in debianbasierten Linux-Distributionen wie Ubuntu verhalten.
Normalerweise sollten die Zertifikate so monatlich automatisch erneuert werden. Wenn dann aber eine „Let’s Encrypt certificate expiration notice“ vom Let’s Encrypt Expiry Bot an die SSLAdmin-Adresse eintrudelt und vor dem Ablauf eines Zertifikats in beispielsweise 19 Tagen warnt, ist wohl etwas schief gelaufen. In diesem Fall kann ein Blick in die Logdateien helfen, die unter Debian im Verzeichnis /var/log/letsencrypt/ gespeichert werden. In dem vorliegenden Beispiel gibt die letzte WARNING-Zeile Aufschluss über den Fehlschlag der Zertifikatserneuerung:
WARNING:certbot.renewal:Attempting to renew cert (example.com) from /etc/letsencrypt/renewal/example.com.conf produced an unexpected error: Failed authorization procedure. sub.example.com (tls-sni-01): urn:acme:error:dns :: DNS problem: NXDOMAIN looking up A for sub.example.com. Skipping.
Für die im Multi-Domain-Zertifikat enthaltene Subdomain sub.example.com gibt es demnach keinen DNS-Eintrag mehr (NXDOMAIN). Hintergrund ist, dass diese Subdomain nicht mehr gebraucht wurde und nach dem Abräumen der VirtualHost-Konfiguration auch der A-Record gelöscht wurde. Dummerweise wurde beim Aufräumen das Zertikat vergessen, welches nun nicht mehr erneuert werden kann, da seitens Let’s Encrypt eine Überprüfung der enthaltenen Subdomain nicht mehr möglich ist.
Abhilfe schafft hier, das Zertifikat manuell unter Auflistung der verbliebenen Domains zu erneuern. Die Option --expand
sollte übrigens besser nicht verwendet werden, wenn Domains aus dem Zertifikat entfernt werden sollen, da Certbot dann die alte Zertifikatskonfiguration nicht überschreibt, sondern eine zusätzliche mit dem Suffix -0001 anlegt, siehe auch diesen Thread im Forum von Let’s Encrypt. Stattdessen empfiehlt es sich, die Option --cert-name CERTNAME
zu verwenden, wie im Manual von Certbot beschrieben.