# Let’s Encrypt

Let’s Encrypt (deutsch „Lasst uns verschlüsseln“) ist eine Zertifizierungsstelle, die Ende 2015 in Betrieb gegangen ist und kostenlose X.509-Zertifikate für Transport Layer Security (TLS) anbietet. Die Zertifikate haben eine Gültigkeit von jeweils 90 Tagen und können manuell oder automatisch erneuert werden. Dabei ersetzt ein automatisierter Prozess die bisher gängigen komplexen händischen Vorgänge bei der Erstellung, Validierung, Signierung, Einrichtung und Erneuerung von Zertifikaten für verschlüsselte Websites.
Ziel des Projekts ist es, verschlüsselte Verbindungen im World Wide Web zum Normalfall zu machen. Indem unter anderem Zahlung, Webserverkonfiguration, Validierungs-E-Mails und die Sorge um abgelaufene Zertifikate überflüssig werden, sollen Aufwand für Einrichtung und Pflege von TLS-Verschlüsselung deutlich gesenkt werden. Auf einem Linux-Webserver soll das Ausführen von nur zwei Befehlen genügen, um binnen 20 bis 30 Sekunden HTTPS-Verschlüsselung einzurichten, Zertifikate anzufordern und zu installieren.
Bei aktuellen Bestrebungen von großen Webbrowser-Projekten, unverschlüsseltes HTTP als überholt zu erklären und zukünftig davor zu warnen oder die Unterstützung einzuschränken, wird unter anderem auf die Verfügbarkeit von Let’s Encrypt gesetzt. Dem Projekt wird das Potenzial zugesprochen, die standardmäßige Verschlüsselung des gesamten Web zu erreichen.
Um sowohl die eigene Vertrauenswürdigkeit zu erhöhen als auch gegen Angriffe und Manipulationsversuche zu schützen, soll auf größtmögliche Transparenz gesetzt werden. Dazu werden zum Beispiel regelmäßig Transparenzberichte veröffentlicht, alle Ausstellungstransaktionen öffentlich protokolliert (u. a. mit Certificate Transparency) und möglichst viel auf offene Standards und freie Software gesetzt.
Das Projekt erhielt den FSF Award 2019.
Es werden TLS-Zertifikate mit Domain Validation (DV) ausgestellt. Bewusst nicht angeboten werden TLS-Zertifikate mit einer Prüfung auf Organization Validation (OV) und Extended Validation (EV), da deren Antragsprozess per Definition nicht vollautomatisiert möglich ist und sie damit dem Zweck von Let’s Encrypt zuwiderlaufen, eine niederschwellige unmittelbare Ausstellung von TLS-Zertifikaten zu ermöglichen.

## Beteiligte

Let’s Encrypt ist ein von der gemeinnützigen Internet Security Research Group (ISRG) angebotener Dienst. Hauptsponsoren sind unter anderem die Electronic Frontier Foundation (EFF), die Mozilla Foundation, Akamai, Google Chrome und Cisco Systems. Weitere Beteiligte sind die Zertifizierungsstelle IdenTrust, die University of Michigan (U-M), die Stanford Law School, die Linux Foundation sowie Stephen Kent von Raytheon/BBN Technologies und Alex Polvi von CoreOS.

## Technik

Let’s Encrypt besitzt ein RSA- und ein ECDSA-Stammzertifikat, das in einem Hardware-Sicherheitsmodul verwahrt wird. Damit werden mehrere RSA- und ECDSA-Zwischenzertifikate signiert. Eine Teilmenge der Zwischenzertifikate dient zur Signierung der ausgestellten Teilnehmerzertifikate, die anderen als Ersatz im Fall von Problemen mit ersten. Teilnehmerzertifikate mit RSA- oder ECDSA-Schlüssel werden sortenrein über die jeweilige RSA- oder ECDSA-Zertifikatskette ausgestellt.
Frühere Zwischenzertifikate wurden durch die Zertifizierungsstelle IdenTrust gegengezeichnet. Durch die IdenTrust-Signatur konnten die ausgestellten Zertifikate in gebräuchlichen Webbrowsern über die vorinstallierten Stammzertifizierungsstellen geprüft werden. So wurden Let’s-Encrypt-Zertifikate auf Client-Seite von Anfang an in der Regel ohne weiteres akzeptiert. Seit Ende Juli 2018 ist das Stammzertifikat von Let’s Encrypt in allen wichtigen Root-Programmen vertreten.

### Protokoll

Zur Automatisierung der Zertifizierung nutzt Let’s Encrypt das Challenge-Response-Verfahren Automatic Certificate Management Environment (ACME). Dabei werden verschiedene Anfragen entweder an Unterseiten am Webserver oder direkt DNS-Anfragen an die zu zertifizierende Domain gestellt. In beiden Fällen wird ein vorher von Let’s Encrypt erstellter „Token“ (ein Zufallswert) entweder auf einer speziellen Unterseite am Web-Server oder als TXT Resource Record im DNS der betreffenden Domain öffentlich abgelegt und von Let’s-Encrypt-Servern in Folge abgefragt. Anhand der Antwort mit den Token wird sichergestellt, dass der Antragsteller den Web-Server oder direkt den Nameserver und die damit verknüpfte Domain kontrolliert (englisch domain validation).
Die Validierungsverfahren werden mehrmals über verschiedene Netzwerkpfade durchgeführt. Zur Erschwerung von DNS-Spoofing ist die Prüfung von DNS-Einträgen von mehreren geographisch verteilten Standpunkten aus vorgesehen.
Bei ACME-Interaktionen werden JSON-Dokumente über HTTPS-Verbindungen ausgetauscht. Das Protokoll wurde im März 2019 von der Internet Engineering Task Force als Request for Comments im Status eines vorgeschlagenen Internetstandards veröffentlicht.

### Server-Implementierung

Die Zertifizierungsstelle besteht im Wesentlichen aus einer in Go geschriebenen Software namens Boulder, die die Server-Seite des ACME-Protokolls implementiert. Sie wird als freie Software auch in Quelltextform unter den Bedingungen von Version 2 der Mozilla Public License (MPL) verbreitet. Sie stellt eine REST-Programmierschnittstelle zur Verfügung, auf die TLS-verschlüsselt zugegriffen werden kann.
Für verschiedene Linux-Distributionen existieren Pakete, welche die Cert-Updates automatisch durchführen, so für Debian das package Certbot.

### Clients

Durch den offenen Standard ACME sind mittlerweile über 40 unterschiedliche Clients entwickelt worden.
Im Rahmen des Projekts wurde eine Apache-lizenzierte Python-Referenzimplementierung namens certbot (früher letsencrypt) entwickelt. Über diese wird am Webserver eines Antragstellers das Zertifikat angefordert, der Domain-Validierungsprozess durchgeführt, das Zertifikat installiert, die HTTPS-Verschlüsselung im Webserver eingerichtet und später das Zertifikat regelmäßig erneuert. Nach der Installation und Zustimmung zu einem Benutzervertrag genügt die Ausführung des reinen Befehls, um ein gültiges Zertifikat installiert zu bekommen. Es können aber auch zusätzliche Funktionen wie OCSP stapling oder HTTP Strict Transport Security (HSTS) eingestellt werden. Die automatische Einrichtung funktioniert zunächst allerdings nur mit Apache und nginx. Der Client kann aus den Paketquellen diverser Linux-Distributionen installiert werden, beispielsweise aus den Debian-Paketquellen.
Daneben gibt es mit acmetool einen in Go geschriebenen mit vor-kompilierten, statischen Programmdateien Client. Die Seite Get HTTPS for free! validiert ein Zertifikat per JavaScript im Webbrowser, wobei der Webadmin Anleitungen bekommt für verschiedene manuell auszuführende Schritte. Caddy ist ein HTTP/2-kompatibler Webserver, der vollautomatisch ein Zertifikat erzeugt und Inhalte per HTTPS ausliefert. Ein weiterer weit verbreiteter Client ist acme-tiny, ein in Python geschriebener Client, er ist weniger als 200 Zeilen lang und soll somit von jedem Nutzer vor der Verwendung selbst gelesen werden.

## Geschichte und Zeitplan

Die Wurzeln des Projektes liegen in einem von der Electronic Frontier Foundation zusammen mit der University of Michigan betriebenen Projekt und einem unabhängigen Projekt von Mozilla, die in Let’s Encrypt zusammengeführt wurden. 2014 wurde die Trägerorganisation, die ISRG, gegründet. Der Start von Let’s Encrypt wurde am 18. November 2014 bekannt gemacht.
Am 28. Januar 2015 wurde das ACME-Protokoll erstmals bei der IETF zur Standardisierung eingereicht. Am 9. April 2015 verkündeten die ISRG und die Linux Foundation ihre Zusammenarbeit. Anfang Juni wurden die Stamm- und Zwischenzertifikate erzeugt. Am 16. Juni wurde der endgültige Zeitplan für die Dienstaufnahme bekanntgegeben, wonach die Ausstellung des ersten Zertifikats für die Woche des 27. Juli vorgesehen war, dem eine Phase eingeschränkter Ausstellung folgen sollte, um die Sicherheit und Skalierbarkeit zu erproben. Am 7. August wurde der Zeitplan geändert auf die erste Zertifikatsausstellung in der Woche des 7. Septembers und allgemeine Verfügbarkeit in der Woche des 16. November. Ab 3. Dezember 2015 befand sich das Projekt in der offenen Betatest-Phase und kann seither von allen Interessierten genutzt werden.
Am 8. März 2016 wurde bekannt gegeben, dass schon über eine Million Zertifikate ausgestellt wurden. Eineinhalb Monate später waren es über zwei Millionen, weitere eineinhalb Monate später über fünf Millionen Zertifikate ausgestellt. Ein nennenswerter Teil des Zuwachses geht auf Kooperationen mit Webhosting-Anbietern wie zum Beispiel WordPress.com (über 1 Million zusätzliche Sites) zurück, die für betreute Websites TLS-Verschlüsselung mit Let’s-Encrypt-Zertifikaten anbieten beziehungsweise diese eigenständig umgestellt haben. Seit der Öffnung des Betriebs erhöhte sich bis zum 22. Juni 2016 nach Messung von Browserhersteller Mozilla der weltweite Anteil verschlüsselter Websites von 39,5 auf 45 Prozent.
Am 17. März 2016 gab das Projekt bekannt, dem CA/Browser Forum beigetreten zu sein, das die Nutzung von X.509-v.3-Zertifikaten für TLS regelt.
Am 12. April 2016 ging das Projekt aus der offenen Betaphase in den offiziellen Regelbetrieb über.
Seit dem 13. März 2018 bietet Let’s Encrypt auch sogenannte Wildcard-Zertifikate an.
Am 27. Februar 2020 stellte Let’s Encrypt das einmilliardste Zertifikat aus. Kurz darauf musste Let’s Encrypt 3 Millionen Zertifikate zurückziehen, da bei deren Ausstellung die DNS Certification Authority Authorization nicht hinreichend geprüft wurde.
Im August 2023 waren den Angaben von Mozilla zufolge 78 Prozent des Internetverkehrs in den Firefox-Webbrowsern verschlüsselt; 10 Jahre zuvor waren es noch 27 Prozent.

## Nichtkommerzielle Alternativen

CAcert ist eine weitere nichtkommerzielle Zertifizierungsstelle, die bereits seit 2003 kostenlose Zertifikate herausgibt. CAcert basiert auf einem Web of Trust. Im Gegensatz zu Let’s Encrypt beschränkt sich CAcert nicht nur auf Server-Zertifikate, sondern stellt auch Client-Zertifikate oder S/MIME-Zertifikate aus. Die Wurzelzertifikate von CAcert waren und sind nicht in den Zertifikatsspeichern gängiger Webbrowsern enthalten. Lediglich einige Linux-Distributionen liefern es mit aus.