Let´s Encrypt – Kostenlose SSL-Zertifikate Frei Haus

Obwohl es signierte TLS-Zertifikate bereits seit einigen Jahren kostenlos gibt und Google im August 2014 ankündigte, dass die Verschlüsselung von Webseiten ein Rankingfaktor ist, werden die meisten Daten noch immer unverschlüsselt ausgeliefert. Denn vielen Webmastern ist das Beantragen und Einrichten eines Zertifikats zu kompliziert. Die Zertifizierungsstelle Let´s Enrypt will das nun durch ein automatisiertes System ändern.

Als Netscape 1994 die erste Version von SSL veröffentlichte, hat wohl niemand damit gerechnet, wie wichtig diese Technologie 22 Jahre später werden würde. Deshalb verwundert es noch mehr, dass trotz der hohen Bedeutung, die nicht zuletzt durch die vielen Abhörskandale nachgewiesen wurde, noch immer ein Großteil des Datenverkehrs unverschlüsselt übertragen wird. Allerdings ist Licht am Horizont zu sehen, denn 2014 haben Branchengrößen wie Mozilla, Cisco, die University of Michigan und Akamai die Internet Security Research Group (ISRG) mit dem Ziel gegründet, das Internet sicherer zu machen. Neben bekannten Größen hat auch die Nichtregierungsorganisation (NGO) Electronic Frontier Foundation einen Posten als Beobachter innerhalb der ISRG. Die erste Initiative der Organisation ist die Zertifizierungsstelle (CA, Certificate Authority) Let´s Encrypt, die durch einen automatisierten Prozess den Zugang zu kostenlosen Zertifikaten erleichtern soll.

Wie funktioniert Let´s Encrypt?

Zum Erhalt eines domainvalidierten Zertifikats muss der Antragsteller gegenüber der Zertifizierungsstelle nachweisen, dass die Domain unter seiner Kontrolle steht. Im Gegensatz zu anderen Anbietern, die dazu eine E-Mail mit einem Link, der zum erfolgreichen Validieren angeklickt werden muss, an den Webmaster, Hostmaster oder Administrator der Domain schicken, nutzt Let´s Encrypt ein selbst entwickeltes Protokoll mit dem Namen Automated Certificate Management Enviroment (ACME). Damit ein Zertifikat über dieses Protokoll angefordert werden kann, muss auf dem Server ein entsprechender Client installiert sein. Das kann sowohl der Offizielle von Let`s Encrypt sein, als auch ein eigener, der das offene ACME-Protokoll implementiert. Wird nun ein Zertifikat für eine Domain angefordert, stellt die Zertifizierungsstelle eine Aufgabe, mit dessen Lösung die Hoheit über die Domain nachgewiesen wird. Dieser Vorgang ist allerdings nur bei der Erstausstellung möglich. Bei nachfolgenden Zertifikaten wird eine alternative Validierung genutzt, bei der die Kontrolle über die Domain durch das alte Zertifikat sichergestellt wird. Jedes von Let´s Encrypt ausgestellte Zertifikat ist maximal drei Monate gültig. Der Vorgang zur Neuausstellung kann jedoch vollständig automatisiert werden, sodass ein manuelles Eingreifen nicht mehr notwendig ist. Dazu kann der offizielle Client auch die verwalteten Domains auslesen und nach erfolgreichem Beantragen der Zertifikate auch den Webserver einrichten. Wobei dieses aktuell nur unter Debian-basierten Distributionen mit dem Webserver Apache2 möglich ist. Alle, die ein anderes Betriebssystem oder einen anderen Webserver nutzen, können sich dennoch das Zertifikat automatisch erstellen lassen. Müssen dabei die Domains jedoch beim Beantragen als Parameter mit angeben und auch den Webserver selbst einrichten.

Browsererkennung

Da die Browser dem Root-Zertifikat der ISRG, dass die Zwischenzertifikate von Let´s Encrypt signiert, noch nicht vertrauen, wurde es zusätzlich mit dem Root-Zertifikat von IdenTrust cross-signed. Dadurch vertrauen alle aktuellen Browser den Zertifikaten von Let´s Encrypt.

Installation unter Debian

Debian Stretch und Debian Sid, die aktuellen test und unstable Branches, enthalten zwar den Let´s Encrypt Client bereits als Paket, sollten aber nicht auf einem Produktivsystem genutzt werden. Wer jedoch nur ein Testsystem aufsetzen möchte, um Let´s Encrypt zu testen, kann den Client bei beiden Versionen bequem über die Paketverwaltung installieren.

Bei allen anderen Versionen von Debian bleibt nur das manuelle Herunterladen oder Klonen mit Git. Sofern noch nicht vorhanden, kann git über den Paketmanager installiert werden und anschließend, mit dem zweiten Befehl, der aktuelle Branch von Let´s Encrypt auf den Server kopiert werden.

Anschließend lässt sich die Software im Unterverzeichnis letsencrypt finden.

Alle weiteren Befehle können direkt per letsencrypt oder dem Wrapper letsencrypt-auto ausgeführt werden. Der Wrapper bietet den Vorteil, dass er fehlende Abhängigkeiten, wie zum Beispiel die benötigte Python-Umgebung, automatisch installiert und auch die Software aktualisiert. Außerdem werden zum Ausführen, des in Phyton geschriebenen Scripts, Root-Rechte benötigt.

Wird das Script ausgeführt, liest es zunächst die Konfigurationsdateien des Webservers ein, sodass es anschließend weiß, welche Domains vom Webserver verwaltet werden. Es werden sowohl die Domains, die als ServerName angegeben sind, also auch die ServerAliases erfasst, die im späteren Zertifikat als SubjectAltName eingetragen werden. Die gefundenen Domains können, nachdem eine E-Mail Adresse angegeben wurde, vor dem Erstellen des Zertifikats selektiert werden. Standardmäßig werden alle Domains in einem Zertifikat zusammengefasst. Wer mehr als ein Zertifikat nutzen möchte, muss das Script mehrfach ausführen.

Standardmäßig werden Zertifikate mit einer Schlüssellänge von 2048 Bit ausgeliefert. Wem diese nicht reicht, kann beim Ausführen über den nachfolgend gezeigten Parameter einen individuellen Wert angeben.

Außerdem können mit dem Parameter certonly auch ausschließlich die Zertifikate erstellt werden, sodass die Software nicht auf die Konfigurationsdateien der Websoftware zugreifen muss.

Auch die Authentifikation kann, wenn der Parameter –a angegeben wird, manuell durchgeführt werden.

Zertifikate unter Debian automatisch erneuern lassen

Wie eingangs erwähnt, sind die Zertifikate von Let´s Encrypt nur drei Monate gültig und müssen deshalb regelmäßig erneuert werden. Damit wollen die Verantwortlichen sicherstellen, dass Sicherheitslücken in den Verschlüsselungsprogrammen auf allen Servern, die ein Zertifikat von Let´s Encrypt einsetzen, zeitnah behoben werden. Manuell geht das mit nachfolgendem Begehl.

Damit werden die Zertifikate mit den bei der Ersterstellung gemachten Angaben erneuert. Natürlich ist das manuelle Auffrischen der Zertifikate nicht nur mühsam, sondern birgt auch das Risiko, dass es vergessen wird. Deshalb sollte dieser Prozess automatisiert werden. Das geht am einfachsten, indem der Befehl durch einen Cronjob regelmäßig ausgeführt wird. Im nachfolgenden Beispiel werden alle 10 Tage die Zertifikate erneuert, die noch weniger als 30 Tage gültig sind.

Fazit

Aktuell befindet sich Let´s Encrypt zwar noch in der Betaphase, sorgt aber bereits für hitzige Diskussionen. Denn zwar werden kostenlose Zertifikate angeboten, die sich sogar automatisch einrichten und erneuern lässt, doch dafür auch einige Zugeständnisse gefordert. Zum einen, weil das Script Root-Rechte benötigt, wodurch nicht nur eine Angriffsfläche geschaffen wird, sondern auch der Administrator Vertrauen in das Script setzen muss. Zusätzlich ist, sofern der offizielle Client genutzt wird, ein Interpreter für Phyton notwendig, der ansonsten auf vielen Webservern wohl nicht installiert werden würde. Deshalb wird Let´s Enrypt am Ende nicht jeden glücklich machen und auch ich setze es aktuell bisher nur bei Projekten ein, bei denen der Webserver durch Plesk verwaltet wird. Allerdings sehe ich auch noch einen weiteren Vorteil. Denn dadurch, dass viele Hoster bereits Let´s Encrypt anbieten, erreicht die Initiative auch den Massenmarkt. Das sorgt nicht nur für mehr verschlüsselten Datenverkehr, sondern auch dafür, dass sehr wahrscheinlich weniger Zertifikate verkauft werden, wodurch die kostenpflichtigen Zertifizierungsstellen hoffentlich ihre Preispolitik überdenken. Auch die fehlende Unterstützung von großen Anbietern wie domainfactory sorgt nicht nur dafür, dass kleinere Anbieter wieder etwas haben, mit dem sie sich von den großen abheben können, sondern zeigt wahrscheinlich auch, dass einige das Geschäft mit Zertifikaten nicht so schnell aufgeben wollen.