/etc/letsencrypt/live/deinedomain/ und du kannst es in nginx, Postfix, HAProxy oder was auch immer reinschmeissen. Es gibt 2 Wege zur Verifikation: Port 80 oder DNS-Record.
Let's Encrypt ist eine non-profit Certificate Authority. Die stellen kostenlose TLS-Zertifikate aus weil sie der Meinung sind, dass das ganze Internet verschlüsselt sein sollte. Also sehr Sympathische Typen. Das Protokoll dahinter heisst ACME – Automated Certificate Management Environment – und funktioniert nach dem Prinzip: „Beweise, dass dir die Domain gehört, kriegst du dein Zertifikat."
Let's Encrypt schickt dir eine Challenge. Du legst einen bestimmten Wert irgendwo ab, wo Let's Encrypt nachschauen kann. Die prüfen das. Stimmt es: Zertifikat. Stimmt es nicht – Fehler und du sitzt da und weisst nicht warum. Certbot ist das Tool, das den ganzen Scheiss für dich automatisiert. Du könntest das alles manuell machen. Du kannst den Spass automatisch laufen lassen oder dich selbst darum kümmern - ist mir egal.
Ist relativ einfach: Terminal öffnen und dann:
sudo apt install certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# Prüfen, ob es geklappt hat
certbot --version
# → certbot 5.x.x
Hier entscheidet sich ob du die nächsten 5 Minuten oder die nächsten 30 Minuten verbringst:
/.well-known/acme-challenge/ auf deinem Server ab. Let's Encrypt ruft diese URL über Port 80 ab. Funktioniert – Zertifiikat wird ausgestellt. Einzige Voraussetzung: Port 80 muss von aussen erreichbar sein und DNS muss auf deinen Server zeigen. Das war's. Aber wir beide wissen: Du hast diesen Port nicht geöffnet und lässt nicht jeden rein. Hierfür gibt es eine andere Lösung.# Erst prüfen ob DNS stimmt – beide müssen deine IP zeigen
dig deinedomain.ch +short
dig www.deinedomain.ch +short
# Zertifikat holen
sudo certbot certonly --webroot \
-w /var/www/html \
-d deinedomain.ch \
-d www.deinedomain.ch
Mit --webroot schreibt certbot die Challenge-Datei direkt in dein Document Root. Kein Webserver-Neustart, kein Unterbruch, kein Voodoo.
*.deinedomain.ch? Dann DNS-01. Certbot spuckt dir einen TXT-Record aus den du bei deinem DNS-Provider einträgst. Let's Encrypt prüft, ob der Record da ist. Dauert etwas länger wegen DNS-Propagation, funktioniert aber immer.sudo certbot certonly --manual \
--preferred-challenges dns \
-d deinedomain.ch \
-d www.deinedomain.ch
# Certbot gibt dir sowas aus:
# Please deploy a DNS TXT record under:
# _acme-challenge.deinedomain.ch
# with value: xK92jd8aLm... (zufälliger String)
#
# → Bei deinem Registrar als TXT-Record eintragen
# → Warten bis propagiert:
dig _acme-challenge.deinedomain.ch TXT +short
# → Wenn der Wert erscheint: Enter drücken → Zertifikat raus
--manual kein automatisches Renewal – beim nächsten Mal musst du den DNS-Record manuell neu setzen. Für Wildcard-Zertifikate (*.deinedomain.ch) ist DNS-01 trotzdem der einzige Weg.Nach erfolgreicher Verifikation sind die Dateien da. Immer. Egal welche Methode. Immer unter dem gleichen Pfad:
In 99% der Fälle brauchst du nur fullchain.pem und privkey.pem
# nginx
ssl_certificate /etc/letsencrypt/live/deinedomain.ch/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/deinedomain.ch/privkey.pem;
# Postfix (Mailserver)
smtpd_tls_cert_file = /etc/letsencrypt/live/deinedomain.ch/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/deinedomain.ch/privkey.pem
# HAProxy – braucht ein kombiniertes File
cat fullchain.pem privkey.pem > /etc/haproxy/certs/deinedomain.pem
/etc/letsencrypt/live/ ist nur für root lesbar. Wenn ein Dienst als anderer User läuft (z.B. www-data) muss der entweder Zugriff kriegen oder du kopierst die Zertis woanders hin. Sonst startet der Dienst nicht und du weisst nicht warum.Certbot installiert automatisch einen systemd-Timer der zweimal täglich schaut ob ein Zertifikat in weniger als 30 Tagen abläuft – und es dann erneuert. Du musst nichts tun. Ausser sicherzustellen, dass nach dem Renewal auch der Webserver neu geladen wird:
# Timer läuft – prüfen
sudo systemctl status snap.certbot.renew.timer
# Renewal testen ohne wirklich zu erneuern
sudo certbot renew --dry-run
# Kein Fehler = alles gut. Fehler = Problem.
# Webserver nach Renewal automatisch neu laden
sudo certbot renew --deploy-hook "systemctl reload nginx"
dig deinedomain.ch +short muss deine Server-IP ausgeben bevor certbot auch nur angefasst wird. Nicht vorher. Nicht gleichzeitig. Vorher. Manchmmal crashed der Bumms ohne Grund: versuch es einfach nochmal.-w muss exakt das Document Root sein das dein Webserver ausliefert. Nicht der Parent. Nicht irgendwas Ähnliches. Exakt das.müller.ch wird zu xn--mller-kva.ch. Den Punycode in certbot eintippen.--dry-run – der zählt nicht gegen das Limit.