Let’s Encrypt auf einem Cloud Server mit certbot automatisieren

Einleitung

Die Zertifizierungsstelle Let’s Encrypt bietet die Möglichkeit, TLS/SSL-Zertifikate kostenfrei und automatisiert für Server zu beziehen. Ein Nachteil von Let’s Encrypt ist die vergleichsweise kurze Gültigkeitsdauer der Zertifikate. Dieser Nachteil lässt sich durch die Verwendung einer Software ausgleichen, welche die Erneuerung der Zertifikate auf dem Server automatisch vornimmt. Eine hierfür geeignete Software ist “certbot”, das von der Electronic Frontier Foundation (EFF) herausgegeben wird. In diesem Artikel wird beispielhaft anhand des Apache Webservers gezeigt, wie cerbot auf einem hosting.de Cloud Server eingerichtet werden kann.

Als Alternative zu certbot existiert acme.sh, das ohne Python auskommt. Zur Installation von acme.sh existiet ein separater Artikel.

Voraussetzungen

  • Sie verfügen über einen hosting.de Cloud Server, welcher einen gültigen DNS-Eintrag, z.B. demo.mustermann-domain.de besitzt.

  • Das Betriebssystem des Servers ist ein aktuelles Debian oder Ubuntu.

Installation von Apache

Verbinden Sie sich bitte per SSH als Benutzer root auf den Server. Falls auf dem Server der Befehl sudo nicht zur Verfügung steht, installieren Sie diesen bitte mit den Befehlen:

apt update
apt install sudo

Installieren Sie Apache bitte mit den folgenden Befehlen, falls dieser noch nicht installiert ist:

sudo apt update
sudo apt install apache2

Damit der Server aus dem Internet erreichbar ist, müssen der Port 80 und 443 in der Firewall freigegeben sein.

Installation von certbot

Entfernen alter Versionen

Stellen Sie bitte durch Ausführung des folgenden Befehls:

sudo apt remove certbot

sicher, dass sich keine veraltete Version von certbot mehr auf dem System befindet.

Installation

Führen Sie bitte die folgenden Befehle aus um certbot auf Ihrem System zu installieren:

wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

Variante 1

Nun gibt es zwei Varianten der Konfiguration. In der ersten Variante können Sie die Konfiguration von Apache durch certbot automatisch von certbot vornehmen lassen. In der zweiten Variante müssen Sie die Konfiguration des Webservers von Hand vornehmen. Führen Sie dazu bitte den folgenden Befehl aus:

sudo /usr/local/bin/certbot-auto --apache

Nach der Eingabe eines der beiden Befehle werden weitere Pakete der Distribution installiert:

...
0 aktualisiert, 53 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 74,6 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 229 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]

Bestätigen Sie hier bitte durch Eingabe von j.

Nach der Installation der Pakete werden Sie nach einer E-Mailadresse gefragt. Über diese E-Mailadresse werden Sie benachrichtigt, falls das Zertifikat nicht rechtzeitig erneuert wurde:

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

Geben Sie hier bitte eine E-Mailadresse ein, unter der Sie die Benachrichtigungen empfangen möchten.

Stimmen Sie bitte den Nutzerbedingungen von Let’s Encrypt durch Eingabe von A zu:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

Hiernach werden Sie gefragt, ob Sie einen Newsletter von Let’s Encrypt abonnieren möchten:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Wir empfehlen hier die Option “N” zu wählen.

Nun werden Sie gefragt, für welche Domains Sie Zertifikate beantragen möchten. Geben Sie diese bitte durch Kommas getrennt ein:

No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel):

Beachten Sie, dass Sie auf diesem Server nur Zertifikate für Domains beantragen können, die auf die IP des Servers zeigen.

Wenn Sie die Zertifikate für die Domains beantragt haben, dann erscheint die Nachfrage, ob unverschlüsselte Anfragen an den Webserver auf eine verschlüsselte Verbindung umgeleitet werden sollen:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Hier empfehlen wir die Option 2 zu wählen und somit eine Weiterleitung einzurichten. Wenn in certbot kein Fehler aufgetreten ist, erscheint die Meldung “[…] Congratulations! Your certificate and chain have been saved at […]”.

Starten Sie bitte abschließend Apache einmal neu:

sudo systemctl restart apache2

Variante 2

In der zweiten Variante lädt certbot lediglich die nötigen Zertifikate herunter, konfiguriert Apache jedoch nicht. Die Konfiguration von Apache muss dann händisch vorgenommen werden. Geben Sie dazu bitte den folgenden Befehl ein:

sudo /usr/local/bin/certbot-auto certonly --apache

Die weiteren Schritte zur Einrichtung von certbot sind ähnlich wie bereits für die erste Variante beschrieben.

Automatisierung der Erneuerung der Zertifikate

Zur Automatisierung der Erneuerung der Zertifikate muss ein cron-Job angelegt werden. Ein entsprechender Eintrag in der Datei /etc/crontab kann mit Hilfe des folgenden Befehls vorgenommen werden:

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew" | sudo tee -a /etc/crontab > /dev/null

Test

Um zu überprüfen, ob certbot korrekt funktioniert, rufen Sie bitte im Browser die Domain Ihres Servers auf, also z.B. https://demoserver.mustermann-domain.de. Erhalten Sie keine Warnmeldung wegen eines ungültigen Zertifikats in Ihrem Browser, so war die Installation des Zertifikats erfolgreich.

Zusätzlich können Sie Dienste, wie z.B. https://www.ssllabs.com/ verwenden um zu prüfen, ob die hinterlegten Zertifikate gültig sind.

Referenzen