SSL-Zertifikate zu erstellen war früher sehr nervig. Zuerst musste man sich mit dem unzumutbaren OpenSSL-Syntax herum ärgern und dann die überteuerten Preise der „Zertifikatsmafia“ bezahlen, um ein von Browsern akzeptiertes Zertifikat zu erhalten. (Technisch gesehen war es möglich von StartSSL kostenlose Zertifikate zu bekommen, allerdings nicht für Subdomains und das Widerrufen von Zertifikaten war sehr teuer.)
Zum Glück ändert sich das jetzt, da Let’s Encrypt seit einiger Zeit in der Public-Beta Phase ist. Let’s Encrypt ist eine Certificate Authority (CA), die unter anderem von Mozilla und der EFF gesponsert wird und deren Ziel es ist, das Erstellen von SSL-Zertifikaten unkompliziert zu machen. Dadurch soll verschlüsselter Datentransfer im Internet gefördert werden. Durch den einmaligen Aufruf eines Kommandozeilenprogramms wird ein von Let’s Encrypt validiertes Zertifikat erstellt und der Webserver dazu konfiguriert, es zu benutzen. Und das beste ist, es kostet überhaupt nichts.
Da Let’s Encrypt noch in der Public-Beta ist, ist das ganze noch nicht so komfortabel, wie es einmal sein soll. Es ist jedoch hundertmal einfacher als mit der klassischen Methode.
Da ich Ubuntu-Server 14.04 benutze, und es dafür noch kein Paket gibt, musste ich erst mal das Git-Repository klonen. Dort steht der Wrapper „letsencrypt-auto“ bereit, der Abhängigkeiten für den Client automatisch auflöst und automatische Updates durchführt.
Für die Validierung der Domain und das Erstellen und die Installation des Zertifikats stehen verschiedene Optionen zur Verfügung. Eine davon ist, dass der Let’s Encrypt Client direkt über den Webserver die Validierung durchführt und das erhaltene Zertifikat automatisch auf diesem installiert. Da ich aber keine Lust darauf habe, dass experimentelle Software mir in meiner Serverkonfiguration herum pfuscht, habe ich die „webroot“-Variante gewählt. Dabei wird im obersten Verzeichnis der Webseite („webroot“) der zu validierenden Domain ein Token platziert, das vorher vom Validerungsserver erhalten wurde und das dieser dann abruft und so den Besitz der Domain bestätigt. Das Zertifikat wird bei dieser Variante nicht automatisch installiert. Wenn man für seinen Server bereits SSL-Zertifikate eingerichtet hat, ist das aber kein nennenswerter Mehraufwand.
Ein Zertifikat für alle meine SSL-verschlüsselten Webseiten konnte ich so mit
$ ./letsencrypt-auto certonly --webroot --webroot-path /var/www/wordpress -d 'jonas-moennig.de' -d 'www.jonas-moennig.de' \ --webroot-path /var/www/piwik -d 'piwik.jonas-moennig.de' -d 'www.piwik.jonas-moennig.de' \ --webroot-path /var/www/baikal/html -d 'baikal.jonas-moennig.de' --email jonas@jonas-moennig.de
erhalten.
Die Zertifikate sind nur für 90 Tage gültig, aber das macht nichts, da das Erneuern der Zertifikate noch viel einfacher ist als das Erstellen:
$ ./letsencrypt-auto renew --email jonas@jonas-moennig.de --agree-tos
erneuert alle Zertifikate, die in den nächsten 30 Tagen ablaufen automatisch. Die aktuellen Zertifikate werden immer in /etc/letsencrypt/live/<domain>/fullchain.pem und der dazugehörige Schlüssel in /etc/letsencrypt/live/<domain>/privkey.pem gespeichert, sodass man seine Webserverkonfiguration überhaupt nicht anfassen muss.
Man kann durchaus sagen, dass Let’s Encrypt das Erstellen von SSL-Zertifikaten revolutioniert hat und in den nächsten Jahren maßgeblich dazu beitragen wird, dass Verschlüsselung im Internet noch häufiger Anwendung findet.