Kostenlose HTTPS-Zertifikate mit Let's Encrypt
Let's Encrypt ist eine Zertifizierungsstelle, die kostenlose HTTPS-Zertifikate für Ihre Domain ausstellt. Auf Ihrem VPS holen Sie ein Zertifikat mit wenigen Befehlen über Certbot oder ganz ohne Befehle mit Caddy, und beide verlängern es von selbst. Es gibt zwei Voraussetzungen: Die Domain muss auf die IP-Adresse Ihres Servers zeigen, und die Ports 80 und 443 müssen von außen offen sein.
Wozu brauchen Sie HTTPS?
HTTPS verschlüsselt den Datenverkehr zwischen Browser und Server. Dritte im Netzwerk können das Passwort in einem Anmeldeformular oder die Daten einer Bestellung nicht lesen. Browser können bei Websites ohne HTTPS eine Warnung „nicht sicher“ anzeigen. Ein Zertifikat von Let's Encrypt ist kostenlos, es gibt also keinen guten Grund mehr, auf HTTPS zu verzichten.
Bevor Sie beginnen
- Der A-Record der Domain muss die IP-Adresse Ihres Servers zeigen. Zur Prüfung führen Sie
dig +short example.comaus. Die Ausgabe sollte die IP-Adresse Ihres Servers sein. - Die Ports 80 und 443 müssen offen sein, denn die Validierung findet auf Port 80 statt (HTTP-01). Wenn Sie ufw nutzen, führen Sie
sudo ufw allow 80/tcpundsudo ufw allow 443/tcpaus. Hat Ihr Server in seinem Panel eine eigene Firewall, prüfen Sie auch dort die Regeln. - Hat die Domain einen AAAA-Record (IPv6), muss er ebenfalls auf diesen Server zeigen. Wenn nicht, löschen Sie den Record.
- Ihr Webserver muss laufen und diese Domain kennen.
Installation und Prüfung mit Certbot unter Nginx oder Apache
Die offizielle Anleitung von Certbot empfiehlt das Snap-Paket. Stellen Sie sicher, dass snapd auf dem Server installiert ist (unter Ubuntu meist der Fall), und entfernen Sie ein älteres, über apt installiertes Certbot.
- Installieren Sie Certbot:
sudo snap install --classic certbot - Machen Sie den Befehl überall verfügbar:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Holen Sie das Zertifikat und lassen Sie es im Webserver einrichten. Führen Sie für Nginx
sudo certbot --nginxaus, für Apachesudo certbot --apache. - Beantworten Sie die Fragen: Ihre E-Mail-Adresse, für welche Domains Sie das Zertifikat möchten und ob HTTP auf HTTPS umgeleitet werden soll.
- Probieren Sie die Verlängerung aus:
sudo certbot renew --dry-run
Wenn Sie nur das Zertifikat holen und alles selbst einrichten möchten, führen Sie sudo certbot certonly --nginx aus. Das Certbot-Paket legt von selbst einen geplanten Job an (Cron oder einen systemd-Timer), den Sie in der Ausgabe von systemctl list-timers sehen. sudo certbot certificates listet Ihre Zertifikate und deren Ablaufdaten auf. Certbot verlängert ein Zertifikat, wenn seine Laufzeit knapp wird, und Sie müssen nichts tun. Die Verlängerung kann eines Tages trotzdem scheitern (zum Beispiel wegen einer Firewall-Regel), führen Sie also hin und wieder --dry-run aus.
Um das Zertifikat zu prüfen, sehen Sie zuerst auf das Schlosssymbol in der Adressleiste des Browsers. Das Ablaufdatum per Befehl sehen Sie mit:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
Die Zeile notAfter in der Ausgabe ist das Ablaufdatum des Zertifikats. Wenn Sie die von Certbot hinzugefügte Weiterleitung nicht nutzen, leiten Sie HTTP selbst auf HTTPS um. Fügen Sie unter Nginx dem Server-Block, der auf Port 80 lauscht, die Zeile return 301 https://$host$request_uri; hinzu.
Mit Caddy und ohne Befehle
Wenn Sie Caddy nutzen, müssen Sie nichts zusätzlich installieren. Für eine Domain in seiner Konfiguration holt Caddy das Zertifikat von Let's Encrypt oder ZeroSSL, verlängert es und leitet HTTP auf HTTPS um. Laut offizieller Dokumentation müssen die A- und AAAA-Records der Domain auf den Server zeigen, die Ports 80 und 443 müssen von außen erreichbar sein, und der Datenordner von Caddy muss dauerhaft und beschreibbar sein. Wenn Sie Caddy in Docker betreiben, binden Sie diesen Ordner auf ein Volume. Sonst verschwinden die Zertifikate, wenn der Container gelöscht wird, und ein erneutes Anfordern kann ein Ratenlimit auslösen.
Wildcard-Zertifikate
Ein Wildcard-Zertifikat (*.example.com) deckt alle Subdomains mit einem Zertifikat ab und ist nur mit der DNS-01-Validierung zu bekommen. Diese Validierung nutzt Port 80 nicht. Sie verlangt, dass Sie einen TXT-Record in das DNS Ihrer Domain setzen. Dafür braucht Ihr DNS-Anbieter eine API, und den API-Schlüssel speichern Sie auf dem Server. Die Dokumentation von Let's Encrypt nennt das Speichern solcher Schlüssel auf einem Webserver riskant. Brauchen Sie kein Wildcard-Zertifikat, ist es einfacher, Zertifikate für einzelne Domains per HTTP-01 zu holen, und es verlangt nicht, einen DNS-Schlüssel zu speichern.
Häufige Fehler
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Die Validierung schlägt fehl, Domain nicht gefunden | Der A-Record zeigt auf die falsche IP oder hat sich noch nicht verbreitet | Prüfen Sie die IP mit dig +short example.com und warten Sie |
| Timeout | Port 80 ist geschlossen | Öffnen Sie 80 in ufw und, falls vorhanden, in der Firewall des Panels |
| Die Validierung gelingt manchmal und scheitert manchmal | Der AAAA-Record zeigt auf einen anderen Server | Korrigieren oder löschen Sie den AAAA-Record |
| Fehler wegen Ratenlimit | Zu viele Versuche | Nutzen Sie --dry-run für Tests und sehen Sie die Limits auf der offiziellen Seite nach |
| Die Verlängerung läuft nicht | Kein geplanter Job, oder der Webserver blockiert Port 80 | sudo certbot renew --dry-run zeigt den Fehler |
Die Fehlermeldung sagt meist, welche Validierung fehlschlug und welche Adresse Ihres Servers Let's Encrypt zu erreichen versucht hat. Lesen Sie die Meldung genau. Die Antwort steht oft direkt darin.
Laut der offiziellen Seite von Let's Encrypt gilt ein Limit von 5 Zertifikaten pro Woche für denselben Satz von Domainnamen und von 5 fehlgeschlagenen Validierungen pro Stunde für denselben Domainnamen. Nutzen Sie beim Experimentieren daher --dry-run. Es probiert die Verlängerung in der Staging-Umgebung aus und verbraucht Ihr echtes Limit nicht.
Bei den fertigen Apps von Seturack
Fertige Apps (WordPress, Nextcloud und andere) öffnen sich über HTTPS auf einer aus Ihrer IP-Adresse abgeleiteten sslip.io-Adresse, ein Domainname ist also nicht nötig. Wenn Sie Ihre eigene Domain verbinden, holt Caddy das Zertifikat erneut, und Sie installieren nichts zusätzlich. Die Schritte, um Caddy und die App die Domain mitzuteilen, stehen in diesem Hilfeartikel.
Kommentare0
Noch keine Kommentare
Schreiben Sie den ersten Kommentar und teilen Sie Ihre Gedanken.
Bitte melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen.