If you want to help people,
keep it simple!

Let's Encrypt ausprobiert: In 5 Minuten zur SSL-gesicherten Website

Let's Encrypt ist ein Projekt, mit dessen Hilfe sich jeder kostenlose SSL-Zertifikate ausstellen lassen kann. Die so ausgestellten Zertifikate werden von allen aktuellen Clients akzeptiert und können sowohl für Webserver als auch für andere SSL-basierte Dienste verwendet werden (smtp mit TLS, ldaps, ...).

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:

Konfiguration der Default-Website in /etc/apache2/sites-enabled/000-default.conf

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
Wir haben also eine funktionierende HTTP-basierte Website und wollen diese jetzt mit Let's Encrypt auf SSL umstellen.

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

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.

Auf Wunsch wird die HTTP-Website per Redirect auf die neue HTTPS-Website umgeleitet.


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:

/etc/apache2/sites-enabled/000-default-le-ssl.conf

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



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