Let's Encrypt ausprobiert: In 5 Minuten zur SSL-gesicherten Website
Bei den von der Let's Encrypt CA ausgestellten Zertifikaten handelt es sich um sogenannte Domain-validierte Zertifikate. Das bedeutet, dass bei der Ausstellung überprüft wird, ob der Antragsteller die Kontrolle über den im Zertifikat angegebenen Domainnamen hat. Dazu muss der Antragsteller nachweisen, dass er unter dem im Zertifikat aufgeführten Hostnamen Dateien mit beliebigen Namen und Inhalten per Webserver veröffentlichen kann.
Ein großer Vorteil neben dem Preis ist die komplette Automatisierung der SSL-Konfiguration durch Let's Encrypt:
- Erzeugen eines private-Key und eines Zertifikats-Request
- Einreichen des Zertifikats-Request bei der Let's Encrypt CA
- Domain-Validierung
- Einbinden des Zertifikats in die Webserver-Konfiguration
Seit 3. Dezember 2015 befindet sich die Let's Encrypt Infrastruktur in der öffentlichen Beta-Phase, so dass jeder das Ausstellen eigener Zertifikate testen kann.
Inhalt
SSL-Absicherung einer Website in 5 Minuten
Zum Anfordern und Einbinden von Zertifikaten liefert Let's Encrypt ein Kommandozeilentool, dass den Admin durch die einzelnen Schritte des Zertifikatsmanagements führt. Wer weiß, was er tut, kann das Kommandozeilentool auch komplett über Kommandozeilenoptionen automatisieren.Ab besten lässt sich der Automatismus von Let's Encrypt zum aktuellen Entwicklungsstand unter einer aktuellen Debian/Ubuntu-Version mit Apache 2.4 demonstrieren.
Der Default-Webserver ohne SSL
Auf meinem Beispiel-System läuft ein frisch installiertes Ubuntu 14.04 mit dem Paket apache2. Als Website zum Testen verwende ich die Default-Website. Einzige Änderung zur Default-Konfiguration ist das Einfügen des Server-Namens in der VirtualHost Definition:
Die Website lässt sich unter dem angegebenen Domain-Namen per HTTP von außen erreichen:
Die Ubuntu Default-Page für die Apache Installation |
Installation und Aufruf von letsencrypt-auto
Solange die Distributoren das Werkzeug "letsencrypt" noch nicht in ihren Software-Repositories führen, muss der Anwender das Tool händisch installieren. Um dieses Vorgehen so weit wie möglich zu vereinfachen, stellt Let's Encrypt das Werkzeug letsencrypt-auto zur Verfügung, dass sich selbst um alle notwendigen Software-Abhängigkeiten kümmert. Die Installation von letssencrypt-auto erfolgt per git checkout:
sudo apt-get install git
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Die Hilfe zu den möglichen Kommandozeilen-Optionen liefert "./letsencrypt-auto --help" bzw. "./letsencrypt-auto --help all".
Das Ausführen von letsencrypt-auto sollte als Benutzer root erfolgen oder als ein Benutzer, der mittels sudo root-Rechte erlangen kann. Im einfachsten Fall wird "/.letsencrypt-auto" ohne Kommandozeilen-Optionen gestartet und fragt in einem ersten Dialog nach der zu konfigurierenden Website
Das Ausführen von letsencrypt-auto sollte als Benutzer root erfolgen oder als ein Benutzer, der mittels sudo root-Rechte erlangen kann. Im einfachsten Fall wird "/.letsencrypt-auto" ohne Kommandozeilen-Optionen gestartet und fragt in einem ersten Dialog nach der zu konfigurierenden Website
letsencrypt-auto erkennt die konfigurierten Websites anhand des Parameters "ServerName" |
Im folgenden Schritt muss der Admin seine Email-Adresse angeben und den "Terms of Service" zustimmen.
Die letzte Frage betrifft die Rekonfiguration der zu sichernden Website. Im Modus "Easy" wird die Website sowohl per HTTP als auch per HTTPS bereitgestellt, der Modus "Secure" leitet alle HTTP-Anfragen auf die HTTPS-Variante der Website um.
Nach der Auswahl des gewünschten Modus (ich habe "Secure" ausgewählt) gibt es nach ein paar Sekunden eine Gratulation zur Fertigstellung der Konfiguration und die Website ist nur noch per HTTPS zu erreichen:
Die Website ist per https zu erreichen. |
Aber Moment! Das "https" in der URL-Zeile des Browsers ist ja gar nicht grün! Das liegt an der Ubuntu Default-Website, die ganz am Ende der Seite das "w3c-validated"-Logo per HTTP - also unsicher - von einer fremden Website einbindet. Also schnell die entsprechende Referenz aus "/var/www/html/index.html" entfernt und die Website neu geladen:
Nach dem Entfernen der externen http-Resource aus der Website wird das "https" in der URL-Leiste grün dargestellt |
Perfekt - so soll es aussehen. Ein Blick auf die Zertifikatsinformationen darf natürlich nicht fehlen:
Wo liegen die Zertifikate?
Die Werkzeuge von Let's Encrypt verwalten ihre Daten unter /etc/letsencrypt/. Alle erstellten Schlüssel und Zertifikate liegen versioniert unter /etc/letsencrypt/archive/, die aktuell zu verwendenden Versionen werden nach "/etc/letsencrypt/live/" verlinkt.
Von dort werden Sie auch von der neuen Website-Konfiguration eingebunden. Der neu konfigurierte virtuelle Host ist eine einfache Kopie der HTTP-Variante, ergänzt um die notwendigen SSL-Parameter:
In der ursprünglichen Konfigurationsdatei sorgen folgende automatisch eingefügte Zeilen für die Umleitung aller HTTP-Anfragen auf die HTTPS-Variante der Website:
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} \
[L,QSA,R=permanent]
Über die Include-Anweisung für die Datei "/etc/letsencrypt/options-ssl-apache.conf" wird unsere neue SSL-Website gleich noch mit optimierten SSL-Einstellungen konfiguriert, so dass wir vom SSL-Test von Qualys SSL Labs sofort ein schönes grünes A-Ranking erhalten :-)
Zertifikatsverlängerungen
Let's Encrypt-Zertifikate werden mit einer Gültigkeit von 90 Tagen ausgestellt. Das bedeutet, dass genutzte Zertifikate regelmäßig verlängert werden müssen. Durch die Nutzung der Kommandozeilen-Optionen von "letsencrypt-auto" lässt sich dieser Vorgang z.B. per cronjob automatisieren:
/<pfad>/letsencrypt-auto certonly --apache \
-d <HOSTNAME> --email <EMAIL> \
--renew-by-default
service apache2 restart
--renew-by-default
service apache2 restart
Bei diesem Aufruf ist <HOSTNAME> durch den Hostnamen der Website zu ersetzen. (Werden mehrere Parameter "-d <HOSTNAME>" angegeben, werden alle angegebenen Hostnamen in das Zertifikat aufgenommen.) Bei <EMAIL> ist die bei der Erstkonfiguration angegebene Email-Adresse zu verwenden.
Fazit
Mit Let's Encrypt lassen sich auch schon in der Beta-Phase Zertifikate für die eigene Website ausstellen. Der Einsatz unter Debian/Ubuntu mit apache 2.4 läuft bis auf die Zertifikatserneuerung komplett automatisiert.
Dabei lassen sich die Zertifikate von Let's Encrypt auch für andere SSL-basierte Dienste wie SMTP mit TLS oder LDAPs ausstellen und verwenden. Allerdings sind dafür im Moment die manuellen Modi von "letsencrypt-auto" zu verwenden.
Die Dokumentation von letsencrypt gibt es hier