Dieses Script prüft im ersten Schritt, wie lange das Zertifikat der angegeben Domain noch gültig ist.
Wenn die Gültigkeit einen Wert in Tagen unterschreitet, welcher in der Variable days_until_expiry=
angegebenen wurde, wird ein neues LetsEncrypt Zertifikat für besagte Domain erstellt.
Der Wert ist mit 14 Tagen voreingestellt und kann nach belieben verändert werden.
Es durchsucht die Nginx-Konfigurationsdateien im Verzeichnis /etc/nginx/sites-enabled/
nach dem Domain-Namen, extrahiert diesen und führt den Befehl clpctl lets-encrypt:install:certificate
aus, um das entsprechende SSL-Zertifikat zu erneuern oder zu installieren. Das Skript protokolliert alle seine Aktivitäten in eine Log-Datei, die im Verzeichnis /var/log/script-logs
gespeichert wird.
Domains können jetzt ausgeschlossen werden.
Das kann ganz einfach geschehen, in dem die auszuschließenden Domains in der Variable exclude_domains=
gepflegt werden.
Ein Beispiel:
exclude_domains="git.techniverse.net techniverse.net"
In diesem Beispiel werden die Domains (Subdomains) git.techniverse.net
und techniverse.net
vom verlängern bzw. erstellen der LetzEncrypt Zertifikate ausgeschlossen.
Domains müssen immer durch Leerzeichen getrennt werden.
Sollen keine Domains ausgeschlossen werden, reicht es, die Variable leer zu lassen: exclude_domains=""
Alternative DNS Names werden jetzt ebenfalls unterstützt.
Die einzige Voraussetzung ist, dass in der Vhost Konfiguration der Alternative DNS Name nach dem eigentlichen DNS Namen angegeben wird.
Ein Beispiel:
Ich habe eine Site erstellt. Dabei habe ich die Domain cloud.media-techport.de
angegeben.
In der Vhost Konfiguration ist dieser an erster Stelle gepflegt:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
{{ssl_certificate_key}}
{{ssl_certificate}}
server_name cloud.media-techport.de cloud.techniverse.net;
{{root}}
An zweiter Stelle habe ich den alternativen DNS Name gepflegt. In meinem Fall cloud.techniverse.net
Mehr müsst ihr nicht tun. Das Script wird dies berücksichtigen.
- Klonen des Repositorys
git clone https://git.techniverse.net/scriptos/cloudpanel-autorenew-letsencrypt-certs.git
- Email Settings im Script anpassen
Folgende Variablen stehen zur Auswahl, wenn der Emailversand genutzt werden soll:
email_from="[email protected]"
email_from_name="$hostname | CloudPanel Server"
email_to="[email protected]"
email_subject="Letsencrypt Zertifikate wurden auf $HOSTNAME erneuert"
- Ausführen des Scripts
bash cloudpanel-autorenew-letsencrypt-certs.v1.sh
Die Ausgabe sieht folgendermaßen aus:
Das Zertifikat für cloud.media-techport.de läuft in weniger als 59 Tagen ab (in 58 Tagen).
Erneuere/Erstelle Zertifikat für: cloud.media-techport.de
Certificate installation was successful.
Wenn eine Domain übersprungen wird, sieht die Ausgabe folgendermaßen aus:
Überspringe techniverse.net, da es ausgeschlossen ist.
Wenn ein Zertifikat länger gültig ist, als in der Variable angegeben, sieht die Ausgabe folgendermaßen aus:
Das Zertifikat für dl.techniverse.net ist noch 88 Tage gültig. Keine Erneuerung erforderlich.
Wenn ein Zertifikat mit einem Alternativ DNS Name verlängert / erstellt wird, sieht die Ausgabe folgend aus:
Das Zertifikat für cloud.media-techport.de,cloud.techniverse.net läuft in weniger als 29 Tagen ab (in 27 Tagen).
Erneuere/Erstelle Zertifikat für: cloud.media-techport.de mit alternativen Namen: cloud.media-techport.de,cloud.techniverse.net
Certificate installation was successful.
Der Cronjob kann wiefolgt konfiguriert werden.
-
Aufrufen des Crontabs
crontab -e
-
Konfiguration Cronjob
@daily bash /home/scripts/default/cloudpanel-autorenew-letsencrypt-certs.v1.sh >/dev/null 2>&1