Letzte Aktualisierung am 22.09.2019, 12:09:56 Uhr
Bei Let’s Encrypt handelt es sich um eine Stammzertifizierungsstelle welche kostenlose SSL-Zertifikate ausstellt. Mit Hilfe des Let’s Encrypt Clients können Zertifikate (automatisiert) ausgestellt werden. Die Zertifikate sind grundsätzlich nur 90 Tage gültig. Durch die Automatisierungsmöglichkeiten ist das aber kein K.O Kriterium. Als Betriebssystem kommt Ubuntu 16.04.1 LTS zum Einsatz. Als Webserver wird nicht Apache sondern der recht bebliebte Nginx genutzt.
Herunterladen des Let’s Encrypt Clients
Die Installation ist via git schnell erledigt.
sudo apt-get update sudo apt-get install git -y sudo git clone https://github.com/certbot/certbot /opt/letsencrypt
Die notwendigen Abhängigkeiten bzw. fehlenden Paketen werden bei der ersten Ausführung des Clients nachinstalliert.
Erweiterung der nginx Konfiguration
Der Let’s Encrypt Clients erstellt für die Verifizierung der Webseitenadresse eine temporäre Datei. Dazu wird zuerst eine neues Verzeichnis angelegt:
cd /var/www mkdir letsencrypt chgrp www-data letsencrypt
Im Anschluss muss die entsprechende nginx – Konfigurationsdatei erweitert werden:
server { listen 80 default_server; server_name webserver01.lab01.wydler.eu; ... location /.well-known/acme-challenge { root /var/www/letsencrypt; } ... }
Falls eine permanten Weiterleitung auf SSL konfiguriert ist, muss in diesem Abschnitt die Ergänzung durchgeführt werden.
Zum Schluss den Webserver nginx neustarten:
service nginx configtest service nginx restart
Konfigurationsdatei für den Let’s Encrypt Client
Wie bei Linux üblich werden die Konfigurationsdateien unter /etc/ angelegt. Daher legen wir erstmal die Verzeichnisstruktur an.
mkdir /etc/letsencrypt mkdir /etc/letsencrypt/configs/
Anschließend wird für jede Webseite eine separate Konfiguration angelegt.
vi /etc/letsencrypt/configs/webserver01.lab01.wydler.eu.conf
Inhalt:
# the domain we want to get the cert for; # technically it's possible to have multiple of this lines, but it only worked # with one domain for me, another one only got one cert, so I would recommend # separate config files per domain. domains = webserver01.lab01.wydler.eu # increase key size rsa-key-size = 4096 # the current closed beta (as of 2015-Nov-07) is using this server server = https://acme-v01.api.letsencrypt.org/directory # this address will receive renewal reminders email = meineadresse@domain.de # turn off the ncurses UI, we want this to be run as a cronjob text = True # authenticate by placing a file in the webroot (under .well-known/acme-challenge/) # and then letting LE fetch it authenticator = webroot webroot-path = /var/www/letsencrypt/
Variable domain wird der betroffene Domainname angeben.
Variable email wird für wichtige Meldungen oder für die Schlüsselwiederherstellung benötigt.
Variable webroot-path wird für die temporäre Verifizierungsdatei benötigt.
Zertifikate bei Let’s Encrypt anfordern
Das Anfordern eines Zertifikats erfolgt via Shell.
cd /opt/letsencrypt ./letsencrypt-auto --config /etc/letsencrypt/configs/webserver01.lab01.wydler.eu.conf certonly
Wenn alles funktioneirt hat, erscheint folgender Text:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/webserver01.lab01.wydler.eu/fullchain.pem. Your cert will expire on 2016-12-30. To obtain a new or tweaked version of this certificate in the future, simply run letsencrypt-auto again. To non-interactively renew *all* of your certificates, run "letsencrypt-auto renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Zertifikat in der nginx – Konfiguration zuweisen
Im Abschnitt der SSL Konfiguration folgende Zeilen ergänzen.
server { listen 443 ssl default_server; server_name webserver01.lab01.wydler.eu; ... ssl_certificate /etc/letsencrypt/live/webserver01.lab01.wydler.eu/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/webserver01.lab01.wydler.eu/privkey.pem; ... }
Zum Schluss den Webserver nginx neustarten:
service nginx configtest service nginx restart
Zertifikate automatisch verlängern
Wie bereits anfangs erwähnt, hat das Zertifikat nur eine Gültigkeit von 90 Tagen. Daher bietet es sich natürlich an, das Ganze via Shellskript und Cronjob zu automatisieren. Das schützt natürlich nicht davor, dass eine Erneuerung fehlschlägt. Daher empfehle ich die Überwachung der Protokolldatei auf dem Server (var/log/letsencrypt) oder aber die verbleibenden Tage des Zertifikats. Denn nicht schlimmeres als im Browser der Hinweis, dass das Zertifikat ungültig ist.
Das Shellskript liegt unter (vi /etc/letsencrypt/renew-letsencrypt.sh) und hat folgenden Inhalt:
#!/bin/bash cd /opt/letsencrypt/ ./letsencrypt-auto -n --config /etc/letsencrypt/configs/webserver01.lab01.wydler.eu.conf certonly service nginx reload exit 0
Die Zeile 4 einfach für jeden Let’s Encrypt Konfiguartion kopieren und den Dateinamen anpassen.
Die Datei abspeichern und schließen.
Damit die Datei auch ausgeführt werden, müssen noch die Rechte angepasst werden:
chmod 755 /etc/letsencrypt/renew-letsencrypt.sh
Damit das Skript regelmäßig gestartet wird, erstellen wir noch einen Cronjob:
0 0 1 * * /etc/letsencrypt/renew-letsencrypt.sh
Somit wird das Skript jeden Monat einmal gestartet.