linux-security security encryption ssl tls letsencrypt certbot automation

Let's Encrypt: Automated SSL with Certbot (Artikel 322)

Automatisierung der SSL-Zertifikatsverwaltung mit Let's Encrypt. Erfahren Sie alles über den ACME-Standard, Certbot-Integration für Webserver und die Lösung von Wildcard-Challenges via DNS.

# Let’s Encrypt: Das Ende der manuellen Zertifikats-Wartung

TL;DR / Management Summary Jährliche Zertifikats-Käufe und manuelles Einspielen sind in der modernen IT ein Anachronismus. Let’s Encrypt hat TLS-Zertifikate demokratisiert und automatisiert. Mittels des ACME-Protokolls und dem Tool Certbot fordern wir kostenlose, vertrauenswürdige Zertifikate an, die sich alle 60-90 Tage selbstständig erneuern. Ein Senior Admin nutzt Let’s Encrypt für alles – vom öffentlichen Webserver bis hin zum internen Dienst via DNS-Challenge.


# 1. Einführung & Architektur

Wie ACME Vertrauen schafft.

Der ACME (Automated Certificate Management Environment) Standard beweist gegenüber der CA, dass Sie der rechtmäßige Besitzer einer Domain sind.

# Die Challenge-Typen (Mermaid)

graph TD
    A[Certbot Client] --> B{Challenge Choice}
    B -->|HTTP-01| C[Place file in /.well-known/]
    B -->|DNS-01| D[Create TXT Record in DNS]
    C --> E[Let's Encrypt Server: Verify via HTTP]
    D --> E[Let's Encrypt Server: Verify via DNS]
    E -->|Success| F[Issue Certificate]
    F --> A
    A --> G[Update Webserver Config]

# 2. Praxis: Certbot für Webserver

Installation in Sekunden.

# Für Nginx (Debian/Ubuntu/Arch)

sudo apt install certbot python3-certbot-nginx
# Zertifikat anfordern und Nginx automatisch konfigurieren
sudo certbot --nginx -d myapp.company.com

# Für Apache (RHEL/SLES)

sudo dnf install certbot python3-certbot-apache
sudo certbot --apache -d myapp.company.com

# 3. Wildcards & Interne Netze: DNS-01

Zertifikate ohne offenen Port 80.

Wenn Ihr Server nicht direkt aus dem Internet erreichbar ist, nutzen wir die DNS-Challenge.

# Erfordert ein Plugin für Ihren DNS-Provider (z.B. Cloudflare, Route53, Hetzner)
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cf.ini -d "*.company.com"

# 4. Day-2 Operations: Automatische Erneuerung

Set it and forget it.

Let’s Encrypt Zertifikate sind nur 90 Tage gültig. Certbot installiert automatisch einen Cronjob oder Systemd-Timer.

# Status prüfen

# Testet die Erneuerung aller Zertifikate (Trockenübung)
sudo certbot renew --dry-run

# 5. Troubleshooting & “War Stories”

Wenn die Erneuerung scheitert.

# Story 1: “Die Redirect-Falle”

Symptom: certbot scheitert mit 404 Not Found bei der HTTP-01 Challenge. Ursache: Der Webserver hat einen globalen HTTPS-Redirect, der auch den Pfad /.well-known/acme-challenge/ umleitet, bevor Certbot die Datei lesen kann. Lösung: Schließen Sie den Pfad vom Redirect aus oder nutzen Sie das Certbot-Nginx Plugin, das dies temporär für Sie regelt.

# Story 2: “Das Rate-Limit Disaster”

Symptom: certbot meldet too many certificates already issued for exact set of domains. Ursache: Ein Admin hat in einem fehlerhaften Skript 20x pro Stunde ein Zertifikat angefordert (z.B. in einer Boot-Schleife eines Containers). Let’s Encrypt blockiert die Domain für eine Woche. Lösung: Nutzen Sie während der Entwicklung immer den Staging-Server von Let’s Encrypt: certbot --staging .... Die Zertifikate sind ungültig, unterliegen aber keinen harten Rate-Limits.


# 6. Fazit & Empfehlung

  • Automation: Verlassen Sie sich nicht auf manuelle Schritte. Jedes Zertifikat muss per Timer erneuert werden.
  • Wahl: Nutzen Sie das DNS-Plugin Ihres Providers. Es ist der sauberste Weg und ermöglicht Wildcard-Zertifikate.
  • Wartung: Überwachen Sie die Erneuerungen. Ein abgelaufenes Zertifikat ist ein Totalausfall für Ihre User.

# Anhang: Cheatsheet

Aufgabe Befehl
Liste aller Zertifikate certbot certificates
Zertifikat löschen certbot delete --cert-name <domain>
Nur Zertifikat (ohne Config) certbot certonly ...
Erneuerung erzwingen certbot renew --force-renewal
Port 80 Check `ss -tulpn
Systemd Timer Status `systemctl list-timers
Hilfe anzeigen certbot --help
Staging Server --staging
E-Mail ändern certbot update_account --email <new_mail>
Post-Renewal Hook --post-hook "systemctl reload postfix"