Adventskalender Tag 5: Kostenlose SSL-Zertifikate mit Let’s Encrypt

Die Suche nach einem Thema für heute war eigentlich recht einfach. Viele von euch werden wohl gestern den ganzen Tag über in den verschiedenen Netzwerken und auf etlichen Websites vom Start der Public Beta von Let’s Encrypt mitbekommen. Für alle die nicht wissen, was genau hieran so eine große Nachricht ist, soll dieser Artikel einen ganz kleinen Einblick geben.

Kostenlose SSL-Zertifikate für deine Website

Wollte man in der Vergangenheit den eigenen Blog über HTTPS, also verschlüsselt, anbieten zu können, musste man sich ein SSL-Zertifikat bei einem entsprechenden Anbieter kaufen. Es gab zwar mit StartSSL oder WoSign auch kostenlose Zertifikate, aber auch hier war der Vorgang nicht wirklich einfach. Dies alles soll sich mit Let’s Encrypt ändern. Mit dem Start der öffentlichen Beta-Phase kann sich nun jeder, der einen eigenen Server besitzt, ein solches Zertifikat ausstellen lassen. Hierbei gibt es verschiedene Wege und einen davon möchte ich kurz vorstellen.

Den Client installieren

Die Voraussetzung für die folgenden Schritte ist der ROOT-Zugriff auf einen Server, auf dem Python installiert sein muss. Sind diese Voraussetzungen gegeben, ist die Installation mit drei kurzen Befehlen abgeschlossen:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

Hierbei installiert der Befehl letsencrypt-auto alle notwendigen Pakete auf dem Server. Auf meinem Server mit Debian 7 hat die Installation problemlos funktioniert. Nun war es also soweit, ein Zertifikat auszustellen.

Das erste Zertifikat ausstellen lassen

Es gibt verschiedene Wege, ein Zertifikat zu erhalten. Da auf dem Server bereits ein nginx Server lief und ich diesen manuell konfiguriere, brauchte ich nur die notwendigen Zertifikatsdateien. Daher habe ich die Webroot Methode verwendet. Hierbei wird während der Installation im Website-Hauptverzeichnis ein Ordner angelegt, in den der Client eine Datei zur Verifikation ablegt und die der Server, der das Zertifikat ausstellt dann über den laufenden Webserver abruft (die Dateien werden im Anschluss wieder gelöscht). Der Befehl kann hierbei wie folgt aussehen:

./letsencrypt-auto certonly --webroot -w /var/www/bernhardkau.de/public_html/ -d www.bernhardkau.de -d bernhardkau.de

Ein Zertifikat kann hierbei für mehrere Domains angefordert werden. Auch unterschiedliche Domains können kombiniert werden. Wichtig ist nur, dass alle auf das gleiche Website-Hauptverzeichnis verweisen, da ansonsten die Ausstellung des Zertifikats mit einem Fehler abbricht.

Der Vorgang dauerte bei mir etwa 20 Sekunden. Sobald das Zertifikat erfolgreich ausgestellt wurde, legt es der Client in einem Unterordner von /etc/letsencrypt/ ab und erstellt symbolische Links auf die aktuelle Version:

letsencrypt-auto-certonly-webroot

Das Zertifikat verwenden

Nun muss das Zertifikat natürlich noch in die Server-Konfiguration eingebunden werden. Es gibt ein Plugin für Apache und ein Beta-Plugin für den nginx Server, die das automatisch übernehmen sollen. Beides habe ich selbst noch nicht getestet, da ich wie bereits erwähnt meinen Server manuell konfiguriere. In meinem Fall müssen dabei folgende zwei Dateien in die nginx Konfiguration eingetragen werden:

ssl_certificate /etc/letsencrypt/live/www.bernhardkau.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.bernhardkau.de/privkey.pem;

Die weiteren SSL-Konfigurationsparameter mussten nicht angepasst werden. Nach einen Neuladen der nginx Konfigurationen wurde dann das Zertifikat von Let’s Encrypt verwenden und ein Test der SSL-Konfiguration konnte auch keine Fehler aufweisen.

Zertifikate erneuen

Wer schon einmal ein Zertifikat gekauft hat, der wird wissen, dass diese nur für eine bestimmte Zeit gültig sind. Das sind oftmals bei günstigen Zertifikaten 1-2 Jahre. Wie lange ist also ein von Let’s Encrypt ausgestelltes Zertifikat gültig? Nur 90 Tage! Jetzt werden viele vielleicht schockiert sein, aber eigentlich ist es kein Problem, wie das Team auf einem Blogbeitrag erklärt, denn die Idee hinter Let’s Encrypt ist ja gerade die einfache und automatisierte Ausstellung von Zertifikaten. Man kann also einen Cronjob erstellen, der dann automatisch das Zertifikat erneuert, bevor es abläuft. Hierzu erstellt der zuvor gezeigte Befehl automatisch eine Konfigurationsdatei mit allen hierfür notwendigen Information. Wie genau das dann funktioniert kann ich euch ja in etwas weniger als 90 Tagen in einem weiteren Artikel berichten 🙂

Fazit

Ich hatte zwar schon etwas länger die Möglichkeit, am geschlossenen Beta-Programm teilzunehmen, aber erst jetzt endlich mal den Versuch gestartet. Ich war begeistert, wie einfach das Ausstellen funktioniert hat. Ich hoffe es gelingt euch auch mit den Befehlen aus diesem Artikel. Falls ihr eine andere Konfiguration habt, dann findet ihr im Netz aber mit Sicherheit auf hierfür eine passende Anleitung.

Ich kann zumindest jedem, der den Client nutzen kann, empfehlen, es einfach mal selbst zu versuchen. Aber was ist mit denen, die keinen ROOT-Server besitzen, werden sich jetzt wohl einige Fragen. Die sind leider im Moment noch darauf angewiesen, dass ihre Hoster schnell eine Möglichkeit schaffen, solche Zertifikate über die Administrationsoberflächen des Hostings zu erstellen. Einige haben solche Möglichkeiten schon geschafften. Falls jemand hierzu Informationen zu seinem Hoster hat, würde ich mich über einen Kommentar sehr freuen.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

2 Kommentare » Schreibe einen Kommentar

  1. Let’s Encrypt finde seit Anfang an super. Auch hatte ich die Möglichkeit in der Beta teilzunehmen, allerdings scheiterte es an fehlendem Root-Zugriff. Und ob die Hoster das ermöglichen, glaube ich nicht, denn das SSL-Zertifikat ist doch ein Geschäft für sie.
    Robert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert