Certbot — TLS-Zertifikate von Let's Encrypt automatisieren
Praxis-Guide zu Certbot — TLS-Zertifikate von Let's Encrypt ausstellen, automatisch erneuern und verwalten, mit Plugins für Apache, NGINX und DNS-Challenges.
Certbot ist der offizielle ACME-Client der EFF und der Standardweg, um kostenlose TLS-Zertifikate von Let's Encrypt zu beziehen. Mit einem einzigen Befehl stellst du Zertifikate aus, installierst sie direkt in Apache oder NGINX und richtest die automatische Erneuerung ein. Über Plugins für Webroot, Standalone und DNS-Challenges deckst du jeden Server-Aufbau ab – inklusive Wildcard-Zertifikaten per DNS-01. Dieser Guide zeigt dir die wichtigsten Kommandos vom ersten Zertifikat bis zum unbeaufsichtigten Renewal per systemd-Timer.
Zertifikate ausstellen
certbot certonly --webroot -w <webroot> -d <domain> — Stellt ein Zertifikat über die Webroot-Methode aus (kein Server-Neustart nötig).
certbot certonly --webroot -w /var/www/html -d example.com -d www.example.comcertbot certonly --standalone -d <domain> — Stellt ein Zertifikat über einen temporären Standalone-Server aus (Port 80 muss frei sein).
certbot certonly --standalone -d example.comcertbot certonly --nginx -d <domain> — Stellt ein Zertifikat über das NGINX-Plugin aus (konfiguriert NGINX automatisch).
certbot certonly --nginx -d example.com -d www.example.comcertbot certonly --apache -d <domain> — Stellt ein Zertifikat über das Apache-Plugin aus (konfiguriert Apache automatisch).
certbot certonly --apache -d example.comcertbot certonly --dns-<provider> -d <domain> — Stellt ein Zertifikat über die DNS-01-Challenge aus (für Wildcards und interne Server).
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d '*.example.com'certbot certonly --manual -d <domain> — Stellt ein Zertifikat mit manuellen Challenge-Schritten aus (interaktiv).
certbot certonly --manual -d example.com --preferred-challenges dnscertbot --preferred-challenges http — Legt den bevorzugten Challenge-Typ fest (http-01 oder dns-01).
certbot certonly --standalone --preferred-challenges http -d example.comAutomatische Installation (Server-Plugins)
certbot --nginx — Stellt ein Zertifikat aus und installiert es automatisch für NGINX.
certbot --nginx -d example.com -d www.example.comcertbot --apache — Stellt ein Zertifikat aus und installiert es automatisch für Apache.
certbot --apache -d example.com -d www.example.comcertbot --nginx --redirect — Installiert das Zertifikat und richtet automatisch eine Weiterleitung von HTTP auf HTTPS ein.
certbot --nginx --redirect -d example.comcertbot --nginx --no-redirect — Installiert das Zertifikat, ohne eine Weiterleitung einzurichten.
certbot --nginx --no-redirect -d example.comcertbot install --cert-name <name> — Installiert ein bereits ausgestelltes Zertifikat im Webserver.
certbot install --nginx --cert-name example.comZertifikate verwalten
certbot certificates — Listet alle von Certbot verwalteten Zertifikate mit ihren Details auf.
certbot certificatescertbot renew — Erneuert alle Zertifikate, die zur Erneuerung anstehen.
certbot renewcertbot renew --dry-run — Testet den Erneuerungsvorgang, ohne tatsächlich zu erneuern.
certbot renew --dry-runcertbot renew --force-renewal — Erzwingt die Erneuerung aller Zertifikate unabhängig vom Ablaufdatum.
certbot renew --force-renewalcertbot renew --cert-name <name> — Erneuert ein bestimmtes Zertifikat anhand seines Namens.
certbot renew --cert-name example.comcertbot delete --cert-name <name> — Löscht ein Zertifikat samt zugehöriger Dateien.
certbot delete --cert-name old.example.comcertbot update_symlinks — Repariert defekte Symlinks im Live-Verzeichnis.
certbot update_symlinksRenewal-Hooks
certbot renew --pre-hook "<command>" — Führt einen Befehl vor dem Erneuerungsversuch aus (z. B. einen Dienst stoppen).
certbot renew --pre-hook "systemctl stop nginx"certbot renew --post-hook "<command>" — Führt einen Befehl nach dem Erneuerungsversuch aus (egal ob erfolgreich oder nicht).
certbot renew --post-hook "systemctl start nginx"certbot renew --deploy-hook "<command>" — Führt einen Befehl nur nach einer erfolgreichen Erneuerung aus.
certbot renew --deploy-hook "systemctl reload nginx"/etc/letsencrypt/renewal-hooks/deploy/ — Lege hier ausführbare Skripte ab, die automatisch nach erfolgreichen Erneuerungen laufen.
#!/bin/bash
systemctl reload nginx/etc/letsencrypt/renewal-hooks/pre/ — Skripte, die vor jedem Erneuerungsversuch laufen.
ls /etc/letsencrypt/renewal-hooks/pre//etc/letsencrypt/renewal-hooks/post/ — Skripte, die nach jedem Erneuerungsversuch laufen.
ls /etc/letsencrypt/renewal-hooks/post/Zertifikat-Optionen
certbot --key-type ecdsa — Fordert ein ECDSA-Zertifikat an (kleiner und schneller als RSA).
certbot certonly --nginx --key-type ecdsa -d example.comcertbot --rsa-key-size <bits> — Legt die RSA-Schlüssellänge fest (Standard: 2048).
certbot certonly --nginx --rsa-key-size 4096 -d example.comcertbot --email <email> — Setzt die E-Mail-Adresse für dringende Erneuerungs- und Sicherheitshinweise.
certbot --email admin@example.com -d example.comcertbot --agree-tos — Akzeptiert die Nutzungsbedingungen von Let's Encrypt nicht-interaktiv.
certbot --agree-tos --email admin@example.com -d example.comcertbot --non-interactive — Läuft im nicht-interaktiven Modus (bricht ab, statt nachzufragen).
certbot certonly --non-interactive --webroot -w /var/www/html -d example.comcertbot --expand -d <domains> — Fügt einem bestehenden Zertifikat weitere Domains hinzu.
certbot --expand -d example.com -d blog.example.com -d shop.example.comcertbot --cert-name <name> -d <new-domains> — Ersetzt die Domain-Liste eines bestehenden Zertifikats.
certbot --cert-name example.com -d example.com -d www.example.com -d api.example.comDateipfade
/etc/letsencrypt/live/<domain>/fullchain.pem — Die vollständige Zertifikatskette (Zertifikat + Intermediate). Für ssl_certificate in NGINX verwenden.
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;/etc/letsencrypt/live/<domain>/privkey.pem — Der private Schlüssel. Für ssl_certificate_key in NGINX verwenden.
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;/etc/letsencrypt/live/<domain>/cert.pem — Nur das Server-Zertifikat (ohne Kette).
cat /etc/letsencrypt/live/example.com/cert.pem/etc/letsencrypt/live/<domain>/chain.pem — Nur das/die Intermediate-Zertifikat(e).
cat /etc/letsencrypt/live/example.com/chain.pem/etc/letsencrypt/renewal/<domain>.conf — Konfigurationsdatei für die Erneuerung eines Zertifikats.
cat /etc/letsencrypt/renewal/example.com.conf/var/log/letsencrypt/letsencrypt.log — Certbot-Logdatei zur Fehlersuche.
tail -100 /var/log/letsencrypt/letsencrypt.logAutomatisierung & Cron
0 0,12 * * * certbot renew --quiet — Empfohlener Cron-Job: zweimal täglich Erneuerung versuchen (erneuert nur, wenn fällig).
0 0,12 * * * /usr/bin/certbot renew --quietsystemctl list-timers | grep certbot — Prüft, ob der systemd-Timer für die automatische Erneuerung aktiv ist.
systemctl list-timers | grep certbotsystemctl status certbot.timer — Prüft den Status des certbot-systemd-Timers.
systemctl status certbot.timercertbot renew --quiet --deploy-hook "systemctl reload nginx" — Automatische Erneuerung mit automatischem NGINX-Reload bei Erfolg.
0 3 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"Testen & Staging
certbot --staging — Nutzt den Staging-Server von Let's Encrypt (höhere Rate-Limits, nicht vertrauenswürdige Zertifikate).
certbot certonly --staging --nginx -d test.example.comcertbot --dry-run — Simuliert die Zertifikatsanfrage, ohne etwas zu speichern.
certbot certonly --dry-run --webroot -w /var/www/html -d example.comcertbot revoke --cert-path <path> — Widerruft ein Zertifikat (z. B. wenn der private Schlüssel kompromittiert wurde).
certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pemcertbot revoke --cert-path <path> --reason keycompromise — Widerruft mit einem bestimmten Grund-Code.
certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --reason keycompromise Fazit
Certbot nimmt dir die gesamte Zertifikatsverwaltung ab: Einmal eingerichtet, erneuern sich deine Zertifikate unbeaufsichtigt über den systemd-Timer oder einen Cron-Job. Achte beim Einrichten und Testen auf die Rate-Limits von Let's Encrypt und nutze dafür --dry-run oder --staging, statt produktive Anfragen zu verbrauchen. Setze --force-renewal nur, wenn es wirklich nötig ist – jede erzwungene Erneuerung zählt auf dein Rate-Limit. Prüfe die automatische Erneuerung regelmäßig mit certbot renew --dry-run.
Weiterführende Links
- Certbot – offizielle Dokumentation – Referenz und Anleitungen (englisch)
- certbot.eff.org – interaktive Setup-Anleitung der EFF (englisch)
- Let's Encrypt – Hintergrund, Rate-Limits und Dokumentation