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.
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.
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.
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.
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: