Ich habe hier bereits mal über Certbot geschrieben. Certbot dient zum einfachen Erstellen von Lets Encrypt Zertifikaten. Hier zeige ich euch, wie ihr automatisch eure Webserver Zertifikate erneuern lassen könnt.

Das automatische Erneuern lässt sich mit folgendem Befehl durchführen

certbot renew

Wenn ihr den Befehl testen wollt, dann könnt ihr ihn einfach in der Console eingeben mit folgendem Parameter:

certbot renew --dry-run

Dies bewirkt, dass das Update nur simuliert wird und keine Änderung an den Zertifikaten vorgenommen wird.

Ich habe bei mir den Webserver nginx laufen. Daher verwende ich hier für die Beispiele immer diesen Webserver. Certbot lässt sich jedoch ebenso für apache2 oder andere Webserver nutzen.

Nun gibt es 2 Varianten, wie ihr die Zertifikate updaten könnt. Ihr müsst die Variante wählen, die ihr bereits zum Erstellen der Zertifikate genutzt habt oder die Datei „/etc/letsencrypt/renewal/eure_domain.conf“ anpassen.

Wenn ihr nicht wisst, welche Variante ihr wählen müsst, dann könnt ihr folgende Datei öffnen und nachschauen:

nano /etc/letsencrypt/renewal/eure_domain.conf

Dort sollte nun stehen:

authenticator = webroot

oder

authenticator = standalone

1. Standalone

Wenn ihr den Webserver als „Standalone“ installiert habt, dann müsst ihr folgenden Befehl ausführen:

/usr/bin/certbot renew --pre-hook "/usr/sbin/nginx stop" --post-hook "/usr/sbin/nginx start"

Der Befehl bewirkt, dass der nginx Server zuerst gestoppt wird, bevor das Zertifikat erneuert wird. Danach wird der Server wieder gestartet. Dies ist notwendig, da sonst der benötigte Port bereits von nginx belegt wird.

2.Webroot

Bei der Variante „Webroot“ muss dieser Befehl verwendet werden:

/usr/bin/certbot renew  --post-hook "/usr/sbin/nginx restart"

Bei dieser Variante bleibt nginx dauerhaft online.

Crontab anlegen

Nachdem ihr den obigen Befehl erfolgreich ausprobiert habt, legen wir jetzt einen Cronjob an, damit dieser automatisch ausgeführt wird.

Das geht mit

crontab -e

Wenn ihr noch keinen Crontab angelegt habt, dann sollte folgende Meldung erscheinen. Hier drückt ihr einfach „1“.

cert_3

Nun solltet ihr folgendes sehen.

cert_4

Fügt am Ende der Datei folgende Zeile ein:

Standalone

PATH=/usr/sbin:/usr/bin:/sbin:/bin
0 4 1 * * /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Webroot

PATH=/usr/sbin:/usr/bin:/sbin:/bin
0 4 1 * * /usr/bin/certbot renew  --post-hook "service nginx restart"

Die erste Zeile ist notwendig, da später der Service „nginx“ gestartet werden soll. Dazu müssen hier erst die passenden Umgebungsvariablen gesetzt werden.

Erklärung

1. Stelle: Minute -> 0
2. Stelle: Stunde -> 4
3. Stelle: Tag des Monats -> 1
4. Stelle: Monat -> *
5. Stelle: Wochentag -> *

Das Skript wird also immer am 1. Tag jeden Monats nachts um 4:00 gestartet.

Testen des Scripts

Ihr könnt eure Webseite einfach mit eurem Webbrowser öffnen. Neben der Adresszeile müsstet ihr ein „Schloss“ sehen. Dort klickt ihr drauf und bekommt Details des Zertifikats angezeigt.

cert_1

Nach der Eingabe des Scripts aus dem ersten Schritt der Anleitung  sollte sich das Ablaufdatum verändert haben.

cert_2

 

Quelle:

https://certbot.eff.org/docs/using.html#renewal

Teile diesen Beitrag
Christian

Categories:

4 Kommentare

  1. Bin den Anleitungen StepbyStep gefolgt:

    https://goneuland.de/debian-9-stretch-lets-encrypt-zertifikate-mit-certbot-erstellen/

    https://goneuland.de/debian-9-stretch-nginx-server-konfigurieren-und-absichern/

     

    Bekomme jedoch jetzt am ende diesen Fehler hier beim ausführen dieses Befehls hier:“certbot renew –dry-run“ wo liegt der Fehler wie kann ich das beheben? :

    Attempting to renew cert from /etc/letsencrypt/renewal/xxxx.zz.conf produced an unexpected error: Failed authorization procedure. xxx.yyy.de: urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://xxxx.zz/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    • @ACTROS konntest du das Problem beheben?

      Ich hatte genau das gleiche Problem und konnte es nach ewiger Fehlersuche hiermit beheben:

      # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
      # return 301 https://$host$request_uri;

      certbot renew –dry-run ausführen. Kommentar wieder entfernen:

      # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
      return 301 https://$host$request_uri;

      certbot renew –dry-run läuft dann ohne Probleme durch. Mehrfach getestet. Kann dies jemand erklären?

  2. Hallo Christian,

    ich habe zwei VHOSTs, die ich damals mit dem alten Letsencrypt Client eingerichtet hatte. In einer renewal Datei steht

    authenticator = nginx

    und in der anderen

    authenticator = standalone

    Der Wert nginx fehlt in deiner Anleitung. Ich habe das dann manuell auf nginx vereinheitlicht. Allerdings klappt jetzt das renew nicht.

     certbot renew --dry-run
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    
    -------------------------------------------------------------------------------
    Processing /etc/letsencrypt/renewal/meine.domain.de.conf
    -------------------------------------------------------------------------------
    Cert not due for renewal, but simulating renewal for dry run
    Renewing an existing certificate
    Performing the following challenges:
    Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.
    Attempting to renew cert from /etc/letsencrypt/renewal/meine.domain.de.conf produced an unexpected error: Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.. Skipping

    Hast du eine Idee?

    Übrigens: In dem Artikel zur Einrichtung von certbot schreibst du, dass man den nginx mit

    service nginx restart

    neustarten kann. Unter stretch wird aber systemd benutzt und es muss eigentlich heißen

    systemctl restart nginx

    Deine Version funktioniert aber auch noch (Warum auch immer?)

    Viele Grüße,

     

    • Hallo Cornelius,

      ich habe den Wert nginx nie genutzt. Das sagt die offizielle Doku dazu:
      --apache Use the Apache plugin for authentication & installation
      --standalone Run a standalone webserver for authentication
      --nginx Use the Nginx plugin for authentication & installation
      --webroot Place files in a server's webroot folder for authentication

      Quelle: https://certbot.eff.org/docs/using.html#certbot-command-line-options

      Mit dem nginx Plugin habe ich leider keine Erfahrung. Mein Tipp, versuch es doch als webroot, das klappt auch mit nginx

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.