IT-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

Certbot ist in den offiziellen Debian Apt-Repositories verfügbar.

~# apt-get update
~# apt install -y certbot

Anschliessend werden Apache2 - sofern nicht bereits geschehen - und des Python-Script für Certbot auf Apache installiert.

~# apt-get install apache2 python-certbot-apache

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

Neue Zertikate über die HTTP-Validierung “HTTP-01 challenge” erstellen

Die Mehrheit der Let's Encrypt-Zertifikate wird über die HTTP-Validierung (HTTP-01 challenge) ausgestellt, was die einfache Installation von Zertifikaten auf einem einzelnen Server ermöglicht. das wird jetzt hier gezeigt. Die Konfiguration von Let's encrypt ist gegenüber der ersten Versionen jetzt interaktiv und sehr leicht durchzuführen mit

~# certbot run --apache

Sofern auf dem Webserver bereits für die Domainen virtuelle Hosts erstellt und konfiguriert wurden sind, dann erkennt das Certbot und fragt, für welche Domainnamen das HTTPS aktiviert werden soll. Ist der Webserver noch nicht konfiguriert, dann wird der Domainname manuell eingegeben.

Will man einen gezielten Namen für das Zertifikat mitangeben, dann lautet der Befehl so

~# certbot run --apache --certname certificate1.example.com

Certbot erstellt daraufhin eine neue Apache-Konfigurationsdatei für den neuen virtuellen HTTPS-Host. In der interaktiven Konfiguration fragt der Client, ob alle HTTP-Requests auf HTTPS umgeleitet werden sollen und erstellt bei Zustimmung die entsprechende Konfiguration unterhalb von /etc/apache2/sites-available/ mit der Endung -le-ssl.conf. Anschließend wird der Apache2-Service wie gewohnt neu gestartet.

~# 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.

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

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.

Zertifikate widerrufen und löschen

Das Sperren eines Zertifikats kann durch die Angabe des Zertifikatspfads oder -namens erreicht werden.

~# certbot revoke --cert-name www.example.com

oder mit der Angabe des Pfades zum Zertifikat.

~# certbot revoke --cert-path /etc/letsencrypt/live/www.example.com

Nach der Ausführung von certbot revoke wird gefragt, ob die Zertifikatsdateien gelöscht werden sollen. Wenn wird das nicht bestätigt, dann wird das widerrufene Zertifikat beim nächsten Erneuerungsvorgang erneuert. Mehrere selbsterklärende Optionen können an den Befehl mit übergeben werden:

  • Löschen-nach-Widerruf (fordert den Benutzer standardmäßig zur Auswahl auf)
  • no-delete-after-revoke (fordert den Benutzer standardmäßig zur Auswahl auf)
  • Grund [unbestimmt,Schlüsselkompromiss,Zugehörigkeit geändert,ersetzt,Einstellung der Tätigkeit] (Voreinstellung: nicht spezifiziert)