aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Tools & DevOps

Certbot SSL: automatische Zertifikate mit Let's Encrypt

Die Einrichtung von Certbot SSL ist der kürzeste Weg zu kostenlosem, automatischem HTTPS auf einem VPS. Certbot ist der offizielle Let's-Encrypt-Client: Er beschafft das Zertifikat, passt Ihre Webserver-Konfiguration an und — am wichtigsten — erneuert das Zertifikat von selbst, bevor es abläuft. In diesem Leitfaden gehe ich durch, wie das Tool funktioniert, welches Plugin Sie wann wählen, die DNS-Validierung für Wildcard-Zertifikate, Deploy-Hooks und wie Sie die Erneuerung wirklich kugelsicher machen.

Wie Certbot funktioniert: Challenges und Plugins

Um Let's Encrypt zu beweisen, dass die Domain wirklich unter Ihrer Kontrolle steht, löst Certbot eine Challenge. Es gibt zwei gängige Typen: Die HTTP-01-Validierung stellt eine temporäre Datei über Port 80 bereit, während die DNS-01-Validierung einen temporären TXT-Eintrag zu Ihrer Domain hinzufügt. Einzeldomains nutzen meist HTTP-01, während Wildcard-Zertifikate (*.beispiel.com) zwingend DNS-01 erfordern.

Certbot erledigt das über Plugins. Es gibt zwei Arten: einen Authenticator (der die Validierung durchführt — z. B. nginx, apache, webroot, standalone) und einen Installer (der das Zertifikat in Ihre Konfiguration einträgt — z. B. nginx, apache). Die Plugins nginx und apache übernehmen beide Rollen, was sie zum einfachsten Weg macht.

Certbot installieren

Die empfohlene Installation ist das snap-Paket; es liefert stets die neueste Version und richtet den Erneuerungs-Timer automatisch ein. Unter Ubuntu/Debian:

sudo apt update
sudo apt install snapd -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Möchten Sie snap vermeiden, installieren Sie aus den Repositorys Ihrer Distribution: sudo apt install certbot python3-certbot-nginx (oder python3-certbot-apache für Apache). Die Version mag etwas älter sein, funktioniert aber. Prüfen Sie mit certbot --version.

Der einfachste Weg: das nginx/apache-Plugin

Auf einem Server, auf dem Nginx bereits läuft, beschafft ein einziger Befehl sowohl das Zertifikat als auch fügt den HTTPS-Block in Ihre Konfiguration ein:

sudo certbot --nginx -d beispiel.com -d www.beispiel.com

Beim ersten Lauf fragt Certbot nach einer E-Mail-Adresse (für Erneuerungswarnungen) und der Zustimmung zu den Nutzungsbedingungen. Anschließend fragt es, ob HTTP auf HTTPS umgeleitet werden soll — wählen Sie „Redirect". Die Logik ist für Apache identisch, nur das Plugin ändert sich:

sudo certbot --apache -d beispiel.com -d www.beispiel.com

Unter Apache aktiviert Certbot mod_ssl und mod_rewrite, erstellt eine SSL-VirtualHost-Datei und fügt die Umleitungsregel hinzu. Testen und laden Sie die Konfiguration bei Nginx nach Abschluss mit sudo nginx -t && sudo systemctl reload nginx neu.

certonly und webroot: ein Zertifikat ohne Eingriff in Ihre Konfiguration

Manchmal möchten Sie nicht, dass Certbot Ihre Webserver-Dateien bearbeitet — die Konfiguration ist komplex, oder Sie sitzen hinter einem Reverse-Proxy. In diesem Fall beschafft das Unterkommando certonly nur das Zertifikat und überlässt Ihnen die Installation. Der sicherste Authenticator ist webroot, denn er schreibt die Validierungsdateien in Ihre bestehende Document-Root, ohne den laufenden Server zu stoppen:

sudo certbot certonly --webroot \
  -w /var/www/beispiel \
  -d beispiel.com -d www.beispiel.com

Hier zeigt -w auf die Document-Root Ihrer Seite; Certbot legt die Validierungsdateien darunter in /.well-known/acme-challenge/ ab. Läuft noch kein Webserver (Port 80 ist frei), können Sie das standalone-Plugin nutzen, das für die Dauer der Challenge seinen eigenen temporären Server startet:

sudo certbot certonly --standalone -d beispiel.com

Die erhaltenen Dateien liegen unter /etc/letsencrypt/live/beispiel.com/: fullchain.pem (Zertifikat + Zwischenkette) und privkey.pem (privater Schlüssel). In Ihrer Nginx-Konfiguration verweisen Sie die Direktiven ssl_certificate und ssl_certificate_key auf diese beiden Pfade.

Wildcard-Zertifikate: die DNS-01-Validierung

Um jede Subdomain unter *.beispiel.com mit einem einzigen Zertifikat abzudecken, brauchen Sie ein Wildcard-Zertifikat, und Let's Encrypt stellt diese nur über DNS-01 aus. Die einfachste Form ist die manuelle Validierung:

sudo certbot certonly --manual \
  --preferred-challenges dns \
  -d "*.beispiel.com" -d "beispiel.com"

Certbot gibt Ihnen einen TXT-Eintrag (_acme-challenge.beispiel.com); diesen fügen Sie in Ihrem DNS-Panel hinzu, warten auf die Verbreitung und fahren fort. Da der manuelle Ansatz bei jeder Erneuerung ein Eingreifen erzwingt, ist es in der Produktion weit praktischer, das offizielle Plugin Ihres DNS-Anbieters zu nutzen. Für Cloudflare beispielsweise mit einem API-Token:

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d "*.beispiel.com" -d "beispiel.com"

So wird der TXT-Eintrag automatisch erstellt und entfernt, und die Erneuerung des Wildcard-Zertifikats läuft vollständig ohne Zutun.

Automatische Erneuerung und Deploy-Hooks

Let's-Encrypt-Zertifikate sind 90 Tage gültig, daher ist Certbots wertvollste Aufgabe die Erneuerung. Die snap- oder Paketinstallation richtet einen systemd timer (oder Cron-Job) ein, der zweimal täglich läuft und erneuert, sobald das Zertifikat in seine letzten 30 Tage kommt. Prüfen Sie, ob er aktiv ist:

systemctl list-timers | grep certbot

Um zu testen, dass die Erneuerung funktioniert, ohne tatsächlich zu erneuern, ist ein Probelauf unerlässlich:

sudo certbot renew --dry-run

Schließt dieser Befehl ohne Fehler ab, ist die Erneuerung sicher. Ein wichtiger Punkt: Nach der Erneuerung muss der Webserver das neue Zertifikat in den Speicher laden. Die Plugins nginx/apache tun das von selbst, aber wenn Sie manuell mit certonly installiert haben, definieren Sie einen Deploy-Hook:

sudo certbot certonly --webroot -w /var/www/beispiel \
  -d beispiel.com \
  --deploy-hook "systemctl reload nginx"

Der Deploy-Hook läuft nur, wenn das Zertifikat tatsächlich erneuert wurde, lädt den Dienst also nicht unnötig neu. Die Erneuerungseinstellungen eines bestehenden Zertifikats stehen in /etc/letsencrypt/renewal/beispiel.com.conf; den Deploy-Hook können Sie auch dort von Hand eintragen.

Häufige Fehler

  • Validierung fehlgeschlagen (Timeout): Meist zeigt der DNS noch nicht auf Ihren Server, oder die Ports 80/443 sind geschlossen. Prüfen Sie die IP mit dig +short beispiel.com und die Ports in Ihrer Firewall.
  • Rate Limit: Let's Encrypt setzt wöchentliche Limits durch. Nutzen Sie beim Einrichten --dry-run oder die --staging-Umgebung; keines verbraucht das echte Limit.
  • „too many redirects": Wenn sowohl Certbot als auch ein CDN (z. B. Cloudflare „Flexible SSL") umleiten, entsteht eine Schleife. Stellen Sie den SSL-Modus des CDN auf „Full (strict)".
  • Erneuerung schlägt stillschweigend fehl: Führen Sie regelmäßig certbot renew --dry-run aus; hat sich der Webroot-Pfad geändert oder ist ein Hook defekt, zeigt sich das hier.

Häufige Fragen

Was ist der Unterschied zwischen Certbot und Let's Encrypt?

Let's Encrypt ist die kostenlose Zertifizierungsstelle (CA), die das Zertifikat ausstellt. Certbot ist die Client-Software, die über das ACME-Protokoll mit dieser CA spricht: Sie führt die Validierung durch, lädt das Zertifikat herunter und erneuert es. Andere Clients wie acme.sh erledigen außerhalb von Certbot dieselbe Aufgabe.

Wie viele Domains passen auf ein Zertifikat?

Indem Sie im selben Befehl mehrere -d-Flags übergeben, können Sie mehrere Domains (SANs) zu einem einzigen Zertifikat hinzufügen; Let's Encrypt unterstützt bis zu 100 Namen pro Zertifikat. Haben Sie viele Subdomains, ist ein Wildcard-Zertifikat meist die sauberere Lösung.

Was tue ich, wenn ich ein Zertifikat widerrufen muss?

Wenn der private Schlüssel kompromittiert wird, widerrufen Sie es mit sudo certbot revoke --cert-name beispiel.com und bereinigen anschließend die Erneuerungskonfiguration mit certbot delete. Im Normalbetrieb ist kein Widerruf nötig; abgelaufene Zertifikate verlieren ohnehin von selbst ihre Gültigkeit.

Möchten Sie Certbot SSL von Grund auf auf Ihrem Server einrichten lassen? Ich kann den gesamten Prozess für Sie übernehmen — Pluginwahl, Wildcard-Zertifikate, Deploy-Hooks und unterbrechungsfreie Erneuerung. Kontaktieren Sie mich.

Bu kategorideki tüm yazılar →

Devamı için