Let's Encrypt ist eine gemeinnützige Zertifizierungsstelle (Certificate Authority) der Internet Security Research Group. Sie gibt seit 2015 TLS-Zertifikate kostenlos aus und hat damit HTTPS im Web massiv verbreitet. Bezahlt wird nicht mit Geld, sondern mit Automatisierung: Die Zertifikate laufen nach 90 Tagen ab und werden programmatisch erneuert.
Das ACME-Protokoll
Die Ausstellung läuft über ACME (Automatic Certificate Management Environment, heute RFC 8555). Der Ablauf ist immer gleich:
- Der Client erzeugt einen Schlüssel und eine Zertifikatsanfrage (CSR).
- Er weist gegenüber Let's Encrypt nach, dass er die Domain kontrolliert (Challenge).
- Die CA stellt das Zertifikat aus, der Client installiert es und richtet die Erneuerung ein.
Die drei Challenge-Arten
- HTTP-01: Eine Datei wird unter
/.well-known/acme-challenge/bereitgestellt. Funktioniert nur auf Port 80. - DNS-01: Ein TXT-Record wird gesetzt. Die einzige Variante, die Wildcard-Zertifikate (
*.example.de) erlaubt. - TLS-ALPN-01: Nachweis über eine eigene TLS-Verhandlung auf Port 443.
Praxis: certbot
# Zertifikat holen und nginx passend konfigurieren
sudo certbot --nginx -d example.de -d www.example.de
# Nur ausstellen, ohne Webserver anzufassen
sudo certbot certonly --webroot -w /var/www/html -d example.de
# Erneuerbare Zertifikate testweise erneuern
sudo certbot renew --dry-run
certbot legt beim Paket-Einbau üblicherweise einen Timer an, der zweimal täglich prüft und fällige Zertifikate erneuert. Das Ergebnis kontrolliert man mit:
openssl s_client -connect example.de:443 -servername example.de \
< /dev/null 2>/dev/null | openssl x509 -noout -dates -subject
Rate Limits
Weil sich alles automatisieren lässt, gibt es Grenzen gegen Missbrauch. Bekannt sind unter anderem 50 Zertifikate pro registrierter Domain und Woche sowie 5 identische („duplicate") Zertifikate pro Woche. Wer beim Testen gegen diese Grenzen läuft, nutzt die Staging-Umgebung von Let's Encrypt.