Design wechseln

SSL-Zertifikate: Let's Encrypt Auto-Renewal und Multi-Domain-Verwaltung

Easton editorial illustration: practice lab desk

Die Alarm-E-Mails weckten das ganze Team. Die Website war nicht erreichbar, der Support wurde überflutet. Im Browser: rote Warnseite – „Das Sicherheitszertifikat dieser Website ist abgelaufen“. Schlimm.

Auf den Server, SSL-Zertifikat war gestern Nacht abgelaufen. Manuelle Verlängerung bis fünf Uhr morgens, zwei Stunden Schlaf, dann wieder ins Büro.

Danach die Frage: Kann man Zertifikatsablauf wirklich verhindern? Let’s Encrypt zeigt: kostenlose SSL-Zertifikate mit Auto-Renewal sind längst ausgereift. Viele Entwickler – ich damals auch – verwalten Zertifikate noch manuell.

Dieser Artikel beantwortet eine klare Frage: SSL-Zertifikate laufen nie ab, Multi-Domain-Verwaltung bleibt übersichtlich. Ob persönlicher Blog oder Unternehmensservice – nach dem Lesen können Sie direkt loslegen.


Was ist Let’s Encrypt? Zuerst die Grundlagen

Viele nutzen Let’s Encrypt, ohne den Mechanismus zu verstehen. Mit Grundlagen finden Sie Fehler schneller.

Rolle der Certificate Authority (CA)

Let’s Encrypt ist eine Certificate Authority, kurz CA. Ihr Anspruch: kostenlos, automatisiert, offen. Seit 2016 hat sie HTTPS massiv verbreitet – über 200 Millionen aktive Zertifikate, 100 % Browser-Vertrauen weltweit.

200 Mio.+
Aktive Zertifikate

Traditionelle CAs (DigiCert, GeoTrust) sind teuer, bürokratisch, manuelle Prüfung. Let’s Encrypt ist vollautomatisch: Antrag, Validierung, Ausstellung. 90 Tage Gültigkeit wirken kurz – mit Auto-Renewal ist das sicherer. Kürzere Laufzeit, geringeres Risiko bei Kompromittierung.

ACME-Protokoll: Kern der Automatisierung

Let’s Encrypt nutzt ACME (Automated Certificate Management Environment), RFC 8555. Das Protokoll definiert automatische Domain-Validierung und Zertifikatsausstellung.

Drei Validierungsmethoden:

  1. HTTP-01: Am häufigsten. Die CA ruft /.well-known/acme-challenge/ auf und prüft das Token – Beweis der Domain-Kontrolle.
  2. DNS-01: Pflicht für Wildcards. Die CA prüft einen DNS-TXT-Record. Kein Webserver nötig, aber DNS-API-Zugriff.
  3. TLS-ALPN-01: Seltener, für Spezialfälle.

HTTP-01 ist am einfachsten, wenn Port 80 erreichbar ist. DNS-01 flexibler für interne Dienste oder Wildcards.

Certbot: offiziell empfohlener Client

Certbot ist der offizielle Let’s-Encrypt-Client. Er übernimmt Antrag, Webserver-Konfiguration und Auto-Renewal.

Kernfunktionen von Certbot:

  • Mehrere Validierungsmethoden
  • Automatische Nginx-/Apache-Konfiguration (Plugins)
  • systemd timer oder Cron Job
  • Dry-Run zum Testen der Verlängerung

Mit diesen Grundlagen wissen Sie bei Problemen, wo Sie suchen müssen.


Einzeldomain-SSL: von null an

Der einfachste Fall: eine Domain, ein Server. Danach ist Multi-Domain der nächste Schritt.

Certbot installieren

Die Installation unterscheidet sich je nach System. Ubuntu/Debian: Snap – offiziell empfohlen, aktuelle Versionen.

Ubuntu/Debian (Snap):

# Snap installieren (falls noch nicht vorhanden)
sudo apt update
sudo apt install snapd

# Certbot installieren
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

CentOS/RHEL:

sudo yum install certbot
# oder
sudo dnf install certbot

Nach der Installation testen:

certbot --version
# Ausgabe z. B.: certbot 2.11.0

Zertifikat beantragen: drei Wege

Certbot bietet drei Modi – je nach Anforderung.

Weg 1: Nginx-Plugin (empfohlen für Einsteiger)

Am wenigsten Aufwand. Certbot passt Nginx an, beantragt das Zertifikat, richtet HTTPS und Redirect ein:

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

Certbot fragt u. a.:

  • E-Mail (für Notfallbenachrichtigungen)
  • Zustimmung zu den Nutzungsbedingungen
  • E-Mail teilen (Nein wählen)
  • HTTP auf HTTPS umleiten (Ja – sicherer)

Danach ist Nginx konfiguriert. Zertifikatspfade werden angezeigt:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem

Weg 2: Apache-Plugin

Analog zu Nginx, Plugin gewechselt:

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

Weg 3: Nur Zertifikat (manuelle Konfiguration)

Wenn Certbot die Konfiguration nicht ändern soll, oder Sie Caddy/Node.js nutzen – certonly:

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

-w setzt das Webroot-Verzeichnis. Certbot legt dort Validierungsdateien ab. Webserver konfigurieren Sie selbst.

Zertifikat prüfen

Nach der Beantragung Funktion verifizieren.

Zertifikatsdateien prüfen

sudo ls -la /etc/letsencrypt/live/example.com/

Vier Dateien:

  • cert.pem: Zertifikat
  • chain.pem: Intermediate Chain
  • fullchain.pem: vollständige Kette (für Nginx)
  • privkey.pem: Private Key (für Nginx)

SSL Labs Test

https://www.ssllabs.com/ssltest/ – Domain eingeben. Bewertung A+ bis F. Ziel: mindestens A.

Häufige Probleme:

  • B oder C: TLS zu alt, schwache Ciphers – Optimierung folgt unten.
  • F: unvollständige Kette – fullchain.pem statt cert.pem in Nginx.

Browser-Test

https://example.com öffnen – Schloss-Symbol. Aussteller: „Let’s Encrypt“.


Auto-Renewal: nie wieder Ablauf sorgen

Let’s-Encrypt-Zertifikate gelten 90 Tage. Mit Auto-Renewal ist das ein Vorteil – schneller Wechsel, geringeres Risiko.

Certbots Auto-Renewal-Mechanismus

Bei der Installation richtet Certbot die Verlängerung ein – je nach System unterschiedlich:

Systemd Timer (modernes Linux):

Certbot legt certbot.timer und certbot.service an. Der Timer läuft zweimal täglich und prüft Ablauf innerhalb von 30 Tagen. Dann startet der Service die Verlängerung.

Timer-Status prüfen:

sudo systemctl list-timers | grep certbot

Beispielausgabe:

NEXT                         LEFT          LAST                         PASSED       UNIT           ACTIVATES
Thu 2026-04-02 12:00:00 UTC  1h left       Thu 2026-04-02 00:00:00 UTC  11h ago      certbot.timer  certbot.service

Nächster und letzter Lauf sind sichtbar.

Cron Job (klassisch):

Ohne systemd (älteres CentOS) setzt Certbot einen Cron Job:

sudo crontab -l
# oder
cat /etc/cron.d/certbot

Typische Konfiguration:

0 0,12 * * * root certbot renew --quiet

Täglich um 0 und 12 Uhr.

Auto-Renewal wirklich testen

Timer oder Cron allein reicht nicht – Verlängerung muss funktionieren.

Dry-Run-Test

Simuliert Verlängerung ohne echte Ausstellung:

sudo certbot renew --dry-run

Beispielausgabe:

Processing /etc/letsencrypt/renewal/example.com.conf
Cert not due for renewal, but simulating renewal for dry run
...
The dry run was successful.

„successful“ bedeutet: Konfiguration stimmt.

Renewal-Konfiguration prüfen

Pro Zertifikat eine Renewal-Datei:

cat /etc/letsencrypt/renewal/example.com.conf

Enthält Antragsparameter und Validierungsmethode – wird bei Verlängerung gelesen.

Auto-Reload nach Verlängerung

Nach Verlängerung nutzt der Webserver noch das alte Zertifikat – Reload nötig.

Deploy Hook (empfohlen)

Nur bei erfolgreicher Verlängerung:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Oder in der Renewal-Datei:

# /etc/letsencrypt/renewal/example.com.conf bearbeiten
# am Ende ergänzen:
deploy_hook = systemctl reload nginx

Post Hook (immer)

Unabhängig vom Erfolg:

sudo certbot renew --post-hook "systemctl reload nginx"

Deploy Hook nur bei Erfolg – meist die bessere Wahl.

Verlängerung schlägt fehl?

Auto-Renewal ist nicht fehlerfrei. Häufige Ursachen:

DNS-Problem

DNS geändert, CA sieht noch alte IP. Auf TTL warten oder manuell:

sudo certbot renew --force-renewal

Firewall oder Port

HTTP-01 braucht Port 80:

sudo ufw status
sudo iptables -L -n

Port 80 öffnen:

sudo ufw allow 80/tcp

Berechtigungen

Falsche Dateirechte prüfen:

sudo ls -la /etc/letsencrypt/live/
sudo ls -la /etc/letsencrypt/archive/

Webserver-User (z. B. www-data) muss lesen können.

Renewal-Logs

sudo tail -f /var/log/letsencrypt/letsencrypt.log

Enthält die Fehlerursache.


Multi-Domain-SSL: zentral oder getrennt

Bei mehreren Domains zählt die Strategie. Sonst: unterschiedliche Ablaufdaten, verstreute Dateien, Fehler in der Konfiguration.

Ein Zertifikat, mehrere Domains (SAN)

Empfohlen: ein Zertifikat mit mehreren Domains:

sudo certbot --nginx \
  -d example.com \
  -d www.example.com \
  -d api.example.com \
  -d admin.example.com

Vorteile:

  • Einheitliche Verlängerung
  • Ein Zertifikatsverzeichnis
  • Einfache Webserver-Konfiguration

SAN (Subject Alternative Names): Feld im Zertifikat mit allen Domains. Der Browser prüft, ob die aufgerufene Domain in der SAN-Liste steht.

Enthaltene Domains anzeigen:

sudo certbot certificates

Beispielausgabe:

Found the following certs:
  Certificate Name: example.com
    Domains: example.com www.example.com api.example.com admin.example.com
    Expiry Date: 2026-07-01 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem

Wildcard-Zertifikat

Wildcard *.example.com deckt Subdomains erster Ebene ab: blog.example.com, api.example.com usw.

DNS-01 ist Pflicht: HTTP-01 unterstützt keine Wildcards. Certbot braucht DNS-API für TXT-Records.

DNS-Plugin konfigurieren

Je nach Anbieter unterschiedlich. Cloudflare ist verbreitet:

# Cloudflare-Plugin installieren
sudo snap install certbot-dns-cloudflare

# Credentials-Datei anlegen
sudo nano /root/.secrets/certbot/cloudflare.ini

Inhalt:

dns_cloudflare_api_token = your_cloudflare_api_token

API Token in der Cloudflare-Konsole, Berechtigung „DNS:Edit“.

Wildcard beantragen

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

Wichtig: *.example.com und example.com zusammen – Wildcard deckt die Apex-Domain nicht ab.

Einschränkungen

Nur Subdomains erster Ebene: *.example.com matcht sub.example.com, nicht sub.sub.example.com.

Für Subdomains zweiter Ebene separat beantragen:

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini \
  -d "*.example.com" \
  -d "*.api.example.com" \
  -d example.com

Deckt api.example.com und v1.api.example.com ab.

Strategie für mehrere Zertifikate

Wann ein SAN-Zertifikat, wann mehrere?

Gruppierung nach Service (empfohlen)

Web-Gruppe: Hauptseite, Blog, Docs

sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com -d docs.example.com

API-Gruppe: Endpunkte, Admin

sudo certbot --nginx -d api.example.com -d admin.example.com -d v1.api.example.com

Interne Dienste: Monitoring, Logs, Tools

sudo certbot certonly --dns-cloudflare -d "*.internal.example.com"

Vorteile:

  • Begrenzte Auswirkung bei Verlängerung
  • Getrennte Berechtigungen
  • Fehlerisolation

Nach Domain-Ebene

Wildcard plus Einzeldomains:

# Wildcard für alle Subdomains
sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com

# Besondere Subdomain separat
sudo certbot --nginx -d secure.example.com

Zertifikatspfad-Struktur

Verzeichnisaufbau verstehen – dann bleibt Multi-Zertifikat-Verwaltung übersichtlich.

Live-Verzeichnis: /etc/letsencrypt/live/[Zertifikatsname]/

Symlinks auf die aktuelle Version. Nach Verlängerung zeigen sie auf neue Dateien.

sudo ls -la /etc/letsencrypt/live/example.com/
lrwxrwxrwx 1 root root  42 Apr  2 12:00 cert.pem -> ../../archive/example.com/cert2.pem
lrwxrwxrwx 1 root root  43 Apr  2 12:00 chain.pem -> ../../archive/example.com/chain2.pem
lrwxrwxrwx 1 root root  44 Apr  2 12:00 fullchain.pem -> ../../archive/example.com/fullchain2.pem
lrwxrwxrwx 1 root root  40 Apr  2 12:00 privkey.pem -> ../../archive/example.com/privkey2.pem

Archiv: /etc/letsencrypt/archive/[Zertifikatsname]/

Historie aller Verlängerungen: cert1.pem, cert2.pem usw.

Renewal-Konfiguration: /etc/letsencrypt/renewal/[Zertifikatsname].conf

Antragsparameter für die Verlängerung:

cat /etc/letsencrypt/renewal/example.com.conf

Enthält u. a.:

  • Validierungsmethode (webroot, nginx, dns-cloudflare)
  • Domain-Liste
  • Deploy Hooks

Erweiterte Konfiguration: Sicherheit und Performance

Nach der Basis lohnt Feintuning – Sicherheit und Geschwindigkeit zusammen.

HTTP/2 und OCSP Stapling

HTTP/2 beschleunigt; OCSP Stapling reduziert Validierungslatenz.

HTTP/2 in Nginx

server {
    listen 443 ssl http2;  # http2 ergänzen
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # ... weitere Konfiguration
}

Nginx testen und neu laden:

sudo nginx -t
sudo systemctl reload nginx

OCSP Stapling

OCSP (Online Certificate Status Protocol) prüft den Zertifikatsstatus. Stapling: Server holt das Ergebnis vorab, Client fragt die CA nicht extra an.

server {
    # ... SSL-Konfiguration

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
}

SSL Labs zeigt dann „OCSP Stapling: Yes“.

Sicherheitshärtung: alte TLS-Versionen deaktivieren

TLS 1.0 und 1.1 sind unsicher. Seit 2020 von mainstream-Browsern abgeschaltet.

server {
    # nur TLS 1.2 und 1.3
    ssl_protocols TLSv1.2 TLSv1.3;

    # empfohlene Cipher Suites
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    ssl_prefer_server_ciphers on;

    # Session Cache (Performance)
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
}

SSL Labs sollte A oder A+ zeigen.

HSTS-Header

HSTS (HTTP Strict Transport Security) zwingt den Browser zu HTTPS. Auch bei http:// leitet er um.

server {
    # ... SSL-Konfiguration

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

Parameter:

  • max-age=31536000: ein Jahr (Sekunden)
  • includeSubDomains: alle Subdomains
  • preload: Eintrag in Browser-Preload-Liste möglich

Hinweis: Mit HSTS kann temporäres HTTP (Tests) scheitern. Vorsichtig einsetzen.

Monitoring und Alarme

Auto-Renewal kann fehlschlagen. Eine Woche vor Ablauf warnen lassen – Zeit für manuelle Korrektur.

63%
Zertifikatsausfälle durch Ablauf

Einfaches Monitoring-Skript

Restlaufzeit prüfen:

#!/bin/bash
# /usr/local/bin/check-ssl-expiry.sh

DOMAIN="example.com"
EXPIRY_DAYS=$(openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)

EXPIRY_DATE=$(date -d "$EXPIRY_DAYS" +%s)
CURRENT_DATE=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_DATE - $CURRENT_DATE) / 86400 ))

if [ $DAYS_LEFT -lt 7 ]; then
    echo "WARNING: SSL certificate for $DOMAIN expires in $DAYS_LEFT days"
    # E-Mail-Alarm (Mailserver erforderlich)
    mail -s "SSL Certificate Expiry Warning" [email protected] <<< "SSL certificate for $DOMAIN expires in $DAYS_LEFT days"
fi

Cron täglich:

0 6 * * * /usr/local/bin/check-ssl-expiry.sh

Certbot-Benachrichtigung

Bei fehlgeschlagener Verlängerung mailt Certbot an die Antrags-E-Mail. Adresse korrekt halten und Postfach prüfen.


Häufige Probleme und Lösungen

Typische Stolpersteine beim Setup.

Zertifikatsantrag fehlgeschlagen

Ursache 1: DNS zeigt nicht auf den Server

HTTP-01 braucht erreichbare Domain. Ohne DNS-Auflösung scheitert die Validierung.

DNS prüfen:

dig example.com +short
# oder
nslookup example.com

IP muss dem Server entsprechen.

Lösung: Auf TTL warten, dann erneut versuchen.

Ursache 2: Port 80 belegt oder Firewall

HTTP-01 nutzt Port 80:

sudo netstat -tulpn | grep :80
sudo lsof -i :80

Blockierenden Dienst stoppen:

sudo systemctl stop <dienstname>

Firewall:

sudo ufw status
# oder
sudo iptables -L -n

Ports öffnen:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Ursache 3: Webroot-Berechtigungen

Bei certonly --webroot legt Certbot Dateien unter .well-known ab:

ls -la /var/www/html/.well-known/

Schreibzugriff für Certbot (meist root) sicherstellen:

sudo mkdir -p /var/www/html/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/html/.well-known

Verlängerung fehlgeschlagen

Ruhe bewahren – Logs lesen, gezielt beheben.

Certbot-Logs

sudo tail -100 /var/log/letsencrypt/letsencrypt.log

Typische Meldungen:

  • Connection refused: Port-Problem
  • DNS problem: NXDOMAIN: DNS-Problem
  • Rate limit exceeded: Antragslimit überschritten

Manuelle Erzwingung

sudo certbot renew --force-renewal

--force-renewal ignoriert das Ablaufdatum.

Renewal-Konfiguration prüfen

Beschädigte .conf verhindert Verlängerung:

cat /etc/letsencrypt/renewal/example.com.conf

Bei Defekt: Zertifikat löschen und neu beantragen:

sudo certbot delete --cert-name example.com
sudo certbot --nginx -d example.com -d www.example.com

Konflikte bei mehreren Zertifikaten

Falscher Zertifikatspfad in der Webserver-Konfiguration.

Falscher Nginx-Pfad

sudo nginx -T | grep ssl_certificate

Jeder server-Block muss den richtigen Pfad nutzen.

Typische Fehler:

  • cert.pem statt fullchain.pem
  • Verzeichnisname passt nicht zur Domain

Zertifikatsname vs. Domain

Certbot benennt nach der ersten -d-Domain:

sudo certbot --nginx -d api.example.com -d example.com

Name: api.example.com, Pfad: /etc/letsencrypt/live/api.example.com/.

Nginx mit /etc/letsencrypt/live/example.com/ findet nichts.

Namen prüfen:

sudo certbot certificates

Name und Pfad müssen übereinstimmen.

Wildcard-Einschränkungen

Praktisch, aber Grenzen beachten.

Nur Subdomains erster Ebene

*.example.com matcht sub.example.com, nicht sub.sub.example.com.

Zusätzliches Zertifikat:

# Wildcard (erste Ebene)
sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com

# zweite Ebene
sudo certbot certonly --dns-cloudflare -d "*.api.example.com"

Apex-Domain nicht im Wildcard

*.example.com deckt example.com nicht ab – -d example.com separat.

Falsch:

# Apex funktioniert nicht
sudo certbot certonly --dns-cloudflare -d "*.example.com"

Richtig:

sudo certbot certonly --dns-cloudflare -d "*.example.com" -d example.com

Fazit: vom manuellen Prozess zur Automatisierung

SSL-Verwaltung ist der Schritt von manuell zu automatisiert. Traditionelle CAs waren aufwendig; Let’s Encrypt macht es zuverlässig und einfach.

Kernpunkte:

  1. Grundlagen: ACME definiert Validierung und Ausstellung. HTTP-01 und DNS-01 für unterschiedliche Szenarien.
  2. Auto-Renewal: Certbot richtet systemd timer oder Cron ein. Auslösung 30 Tage vor Ablauf, zweimal tägliche Prüfung.
  3. Multi-Domain: SAN für zentrale Verwaltung, Wildcard für viele Subdomains. Gruppierung nach Service empfohlen.
  4. Sicherheit: HTTP/2, OCSP Stapling, alte TLS deaktivieren, HSTS – SSL Labs A+ möglich.
  5. Monitoring: Auto-Renewal kann scheitern – Restlaufzeit aktiv überwachen.

Weiterführend:

Bei vielen Servern und Domains:

  • Automatisierungsplattformen: Cert Manager (Kubernetes), Traefik (Auto-SSL)
  • Monitoring-Dienste: SSL Monitor, Uptime Robot
  • CI/CD: Zertifikatsstatus beim Deploy prüfen

Einmal automatisiert, brauchen Sie sich nicht mehr zu sorgen. Sicherheit für Nutzer und Suchmaschinen – und keine Alarm-Mails um drei Uhr nachts.

Let's Encrypt SSL-Zertifikat mit Auto-Renewal konfigurieren

Vollständiger SSL-Ablauf von der Certbot-Installation bis zur automatischen Verlängerung – HTTPS läuft nie ab

⏱️ Estimated time: 30 min

  1. 1

    Step 1: Certbot installieren

    Installation je nach System:

    • Ubuntu/Debian (empfohlen): sudo snap install --classic certbot
    • CentOS/RHEL: sudo yum install certbot
    • Test: certbot --version
  2. 2

    Step 2: SSL-Zertifikat beantragen

    Passende Methode wählen:

    • Nginx Auto-Konfiguration: sudo certbot --nginx -d example.com -d www.example.com
    • Apache Auto-Konfiguration: sudo certbot --apache -d example.com -d www.example.com
    • Nur Zertifikat: sudo certbot certonly --webroot -w /var/www/html -d example.com
  3. 3

    Step 3: Auto-Renewal prüfen

    Prüfen, ob Certbot die Verlängerung automatisch eingerichtet hat:

    • Systemd Timer: sudo systemctl list-timers | grep certbot
    • Dry-Run-Test: sudo certbot renew --dry-run
    • Ausgabe „successful“ bestätigen
  4. 4

    Step 4: Auto-Reload nach Verlängerung konfigurieren

    Deploy Hook in der Renewal-Konfiguration ergänzen:

    • Datei bearbeiten: sudo nano /etc/letsencrypt/renewal/example.com.conf
    • Konfiguration: deploy_hook = systemctl reload nginx
    • Oder per CLI: sudo certbot renew --deploy-hook "systemctl reload nginx"
  5. 5

    Step 5: Sicherheitshärtung konfigurieren

    Sicherheitsoptimierungen in der Nginx-Konfiguration:

    • Alte TLS deaktivieren: ssl_protocols TLSv1.2 TLSv1.3;
    • HTTP/2 aktivieren: listen 443 ssl http2;
    • OCSP Stapling: ssl_stapling on;
    • HSTS-Header: add_header Strict-Transport-Security "max-age=31536000" always;
  6. 6

    Step 6: Monitoring und Alarme einrichten

    Skript für Zertifikatsablauf-Monitoring anlegen:

    • Skript: sudo nano /usr/local/bin/check-ssl-expiry.sh
    • Cron: 0 6 * * * /usr/local/bin/check-ssl-expiry.sh
    • Certbot-E-Mail-Benachrichtigung sicherstellen

FAQ

Warum sind Let's-Encrypt-Zertifikate nur 90 Tage gültig?
90 Tage Gültigkeit plus Auto-Renewal ist sicherer. Schneller Zertifikatswechsel, geringeres Risiko. Bei kompromiertem Private Key ist das Zertifikat spätestens nach 90 Tagen ungültig.
Was ist der Unterschied zwischen HTTP-01 und DNS-01?
HTTP-01: CA ruft einen Pfad auf der Domain ab – am einfachsten, Port 80 muss erreichbar sein. Für Einzeldomains.

DNS-01: CA prüft DNS-TXT-Record – DNS-API-Zugriff nötig. Pflicht für Wildcard-Zertifikate. Für interne Dienste oder viele Subdomains.
Welche Domains deckt ein Wildcard-Zertifikat *.example.com ab?
Nur Subdomains erster Ebene: sub.example.com, api.example.com, blog.example.com usw.

Nicht abgedeckt:
• Subdomains zweiter Ebene: sub.sub.example.com (separat *.sub.example.com beantragen)
• Apex-Domain: example.com (separat mit -d example.com hinzufügen)
Wann löst Certbot Auto-Renewal aus?
Automatisch 30 Tage vor Ablauf. Systemd Timer oder Cron Job prüft zweimal täglich (meist 0 und 12 Uhr). Bei Verlängerung lädt der Deploy Hook den Webserver neu.
SSL Labs zeigt B oder C – was tun?
Häufige Ursachen und Lösungen:

• TLS-Version zu niedrig: ssl_protocols TLSv1.2 TLSv1.3;
• Schwache Cipher Suites: empfohlene Suites konfigurieren (siehe Abschnitt 6)
• Unvollständige Zertifikatskette: fullchain.pem statt cert.pem
• OCSP Stapling fehlt: ssl_stapling on; setzen

Nach Nginx-Reload sollte A oder A+ erreichbar sein.
Einzelnes oder mehrere Zertifikate für mehrere Domains?
Empfehlung: Gruppierung nach Service:

• Ein Zertifikat, mehrere Domains (SAN): verwandte Domains, einheitliche Verlängerung. z. B. example.com, www.example.com, blog.example.com
• Mehrere Zertifikate: verschiedene Services, Fehlerisolation, getrennte Berechtigungen
• Wildcard: viele Subdomains, weniger Zertifikate. *.example.com deckt alle Subdomains erster Ebene ab
Was tun, wenn die Verlängerung fehlschlägt?
Zuerst Logs prüfen: sudo tail -100 /var/log/letsencrypt/letsencrypt.log

Häufige Ursachen:
• DNS-Problem: auf DNS-Propagation warten oder --force-renewal
• Port belegt: Port 80 prüfen, blockierenden Dienst stoppen
• Firewall: Ports 80/443 freigeben
• Berechtigungen: Zertifikatsdatei-Rechte prüfen

Danach manuell: sudo certbot renew --force-renewal

11 Min. Lesezeit · Veröffentlicht am: 2. Apr. 2026 · Aktualisiert am: 14. Juli 2026

Lesepfad der SerieTeil 4 von 4

Linux-Server-Betrieb und Sicherheit

Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.

Serienübersicht öffnen

Ähnliche Beiträge

Kommentare

Melde dich mit GitHub an, um einen Kommentar zu hinterlassen

Easton BlogEaston Blog