🤖Let's Encrypt & ACME
Seit 2015 stellt Let's Encrypt kostenlose Zertifikate aus – vollautomatisch über das ACME-Protokoll (RFC 8555). Die CA prüft nicht deine Identität, sondern nur, ob du die Domain kontrollierst (Domain Validation).
🔁Ablauf als Sequenzdiagramm
Beweis über eine Datei auf Port 80 – einfach, aber keine Wildcards.
Schritt 1: GET /directory – Der Client holt das Verzeichnis mit allen Endpunkt-URLs (newNonce, newAccount, newOrder …).
Schritt 1 / 11 · Tasten ← →
📚 Quelle: RFC 8555 §7 (Ablauf), §8.3 (HTTP-01), §8.4 (DNS-01)
🧮Challenge-Werte selbst berechnen
Die CA schickt ein zufälliges token. Der Client verknüpft es mit dem Fingerabdruck seines Kontoschlüssels – so kann nur der Kontoinhaber die Challenge lösen.
Alles echt berechnet (WebCrypto), aber nur lokal – es wird keine CA kontaktiert.
⏳
♻️Automatische Erneuerung
certbot installiert einen systemd-Timer (oder cron-Job), der regelmäßig certbot renew ausführt. Erneuert wird, wenn die Restlaufzeit unter einer Schwelle liegt – oder wenn die CA per ARI (ACME Renewal Information, RFC 9773) ein früheres Fenster empfiehlt, etwa nach einer Massensperrung.
systemctl list-timers | grep certbot certbot renew --dry-run # nach erfolgreicher Erneuerung nginx neu laden: certbot renew --deploy-hook "systemctl reload nginx"
⚠️ Typische Stolperfallen
Port 80 per Firewall gesperrt (HTTP-01 scheitert) · Weiterleitung auf eine andere Domain ohne Challenge-Pfad · DNS-01 ohne API-Zugang zum DNS · CAA-Eintrag erlaubt eine andere CA · nginx nach der Erneuerung nicht neu geladen → alter Schlüssel bleibt im Speicher, Zertifikat läuft trotzdem ab.
✅ CAA-Eintrag
Mit
example.org. CAA 0 issue "letsencrypt.org" legst du im DNS fest, welche CA für deine Domain ausstellen darf. CAs müssen das vor jeder Ausstellung prüfen.