LINUXMAKER, OpenSource, Tutorials

SSL-Zertifikate mit Let's Encrypt sehr einfach erzeugen

Bei Let's Encrypt handelt es sich um eine Zertifizierungsstelle, die im Jahr 2015 ihren Betrieb aufgenommen hat und kostenlose X.509-Zertifikate für die Nutzung des Transport Layer Security (TLS) zur Verfügung stellt. Damit wird eine große Lücke bei der Benutzung von verschlüsselten Web-Content geschlossen. Denn entweder waren die von kommerziellen Trustcentern angebotenen Zertifikate nur für große Unternehmen und Organisation erschwinglich, oder es fehlte an der Unterstützung der Browser-Hersteller bei freien Zertifizierungsstellen, wie bei CAcert. Denn trotz gültiger Zertifikate zeigte bei CAcert nicht jeder Browser eine Vertrauensstellung an.
Zusätzlich hat Let's Encrypt Scripte entwickelt, die den Zertifizierungsprozess nahezu automatisieren. So sind alle hier beschriebenen Schritte scriptbasiert, so dass selbst technisch nicht so versierte Administratoren einer Webseite SSL-basierte Webseiten erstellen kann. Selbst die Anmeldung bei der Zertifizierungsstelle entfällt.

Zur Automatisierung der Zertifizierung nutzt Let's Encrypt das Challenge-Response-Verfahren Automatic Certificate Management Environment (ACME). Dabei werden verschiedene Anfragen entweder an Unterseiten am Webserver oder direkt DNS-Anfragen an die zu zertifizierende Domain gestellt. In beiden Fällen wird ein vorher von Let’s Encrypt erstellter Token entweder auf einer speziellen Unterseite am Web-Server oder als TXT Resource Record des DNS der jeweiligen Domain öffentlich abgelegt und von Let’s Encrypt-Servern in Folge abgefragt. Anhand der Antwort mit den Token wird sichergestellt, dass der Antragsteller den Web-Server oder direkt den DNS-Server und die damit verknüpfte Domain kontrolliert (domain validation).

Mit der Bereitstellung von Certbot, einem einfach zu bedienenden, automatischen Client, der SSL/TLS-Zertifikate für Webserver abruft und bereitstellt, wird der Zertifizierungsprozess soweit automatisiert, dass anhand der auf dem Webserver konfigurierten Domains, Zertifikate erstellt werden und der Webserver entsprechend konfiguiert wird.

Installation und Konfiguration

Zunächst muss bei Debian Linux die sources.list um die Backports ergänzt werden. Hier ist das am Beispiel von Debian "Stretch" dargestellt.

# echo "deb http:// ftp.debian.org/debian stretch-backports main" >> /etc/apt/sources.list

# apt-get update

Anschliessend werden Apache2 - sofern nicht bereits geschehen - und der Let's Encrypt Certbot installiert.

# apt-get install apache2 python-certbot-apache

Für andere Systeme und Webserver bieten sich auf certbot.eff.org weitere Installationsroutinen an.

Die Konfiguration von Let's encrypt ist gegenüber der ersten Versionen jetzt interaktiv und sehr leicht durchzuführen mit

# certbot apache
# systemctl restart apache2

Sollen nicht alle Domains in einem Zertifikat erfasst werden, dann können die ungewünschten Domains abgewählt werden. Die Zertifikate für die abgewählten Domains werden in einem zweiten Aufruf des certbot generiert.

In der interaktiven Konfiguration fragt der Client, ob alle HTTP-Requests auf HTTPS umgeleitet werden sollen und erstellt bei Zustimmung die entsprechende Konfiguration iunterhalb von /etc/apache2/sites-available/ mit der Endung -le-ssl.conf.

Sollten bereits SSL-Webseiten konfiguriert sein, die ersetzt werden sollen, müssen die kompletten SSL-Virtualhost-Direktiven entfernt werden.

Für jede Domain, die im Apache angelegt wird, wird der Client erneut ausgeführt und die entsprechende Domain ausgewählt, um sie per SSL erreichbar zu machen.

Erneuerung der Zertifikate

Die Zertifikate werden wie gehabt nur für 90 Tage erstellt, dann verlieren sie ihre Gültigkeit. Aber auch das Erneuern erfolgt sehr einfach und lässt sich automatisieren.

# certbot renew --dry-run

generiert einen Trockenlauf, indem alle Website-Konfigurationen eingelesen werden, um die Renew-Funktionalität zu testen. Dabei werden die Konfiguartionsdateien nicht verändert. Bei Erfolg erscheint die Meldung

Congratulations, all renewals succeeded.

# certbot renew

generiert tatsächlich neue Zertifikate. Automatisieren lässt sich der Erneuerungsprozess mit einem Eintrag in die Crontab

0       0       *       *       *       /usr/bin/certbot renew -q --post-hook "/usr/sbin/service apache2 restart"

Somit wird täglich geprüft, ob Zertifikate erneuert werden müssen und falls ja, wird ein Renew durchgeführt. Ist das Ablaufdatum noch nicht erreicht, dann verweigert der certbot seinen Dienst. Die Option -q gibt dem Client die Anweisung, nur eine Rückmeldung auszugeben, sofern Fehler beim Renew aufgetreten sein sollten.