Mit nginx und Certbot hat deine Domain in etwa zehn Minuten ein kostenloses Zertifikat von Let’s Encrypt, das sich selbst verlängert. Du brauchst einen Linux-vServer mit Debian oder Ubuntu, Root-Zugang und eine Domain. Diese Anleitung gilt für deinen eigenen Server. Für Webhosting mit Plesk nimmst du Wie erhalte ich ein kostenloses SSL Zertifikat für meine Domain?
1. Domain auf den Server zeigen lassen
Lege für deine Domain einen A-Eintrag mit der IPv4-Adresse deines Servers an, bei IPv6 zusätzlich einen AAAA-Eintrag. Liegt die Domain bei uns, geht das mit einem Klick über „Mit PPH Server verbinden“. Wie das funktioniert, steht in Wie kann ich meine Domain mit meinem vServer verbinden?
Prüfe auf dem Server, ob der Eintrag schon greift:
getent hosts example.de Erst wenn hier die IP deines Servers steht, geht es weiter. Sonst schlägt Certbot fehl. Warum eine DNS-Änderung manchmal dauert, erklärt Warum dauert ein DNS-Update so lange?
2. nginx und Certbot installieren
apt update apt install nginx certbot python3-certbot-nginx Läuft schon Apache, etwa aus den Webserver-Utilities des App-Installers, belegt er Port 80. Dann stoppst und entfernst du Apache entweder, oder du nutzt Certbot direkt mit Apache (Paket python3-certbot-apache).
3. Seite anlegen
Lege die Datei /etc/nginx/sites-available/example.de an:
server { listen 80; listen [::]:80; server_name example.de www.example.de; root /var/www/example.de; index index.html; } Aktivieren und prüfen:
mkdir -p /var/www/example.de ln -s /etc/nginx/sites-available/example.de /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginx 4. Zertifikat holen
certbot --nginx -d example.de -d www.example.de Certbot fragt nach einer E-Mail-Adresse für Ablaufwarnungen, holt das Zertifikat und trägt es in deine nginx-Konfiguration ein. Die Weiterleitung von HTTP auf HTTPS richtet er gleich mit ein.
5. Verlängerung prüfen
Zertifikate von Let’s Encrypt gelten 90 Tage. Certbot verlängert sie automatisch über einen systemd-Timer. Teste einmal, ob das klappt:
certbot renew --dry-run Klappt nicht?
- „Connection refused“ oder Timeout: Port 80 muss von außen erreichbar sein. Von uns aus sind alle Ports offen (Sind alle Ports freigegeben?). Hast du selbst eine Firewall eingerichtet, prüfe sie mit
ufw statusodernft list ruleset. - Falsche IP: Der DNS-Eintrag zeigt noch woanders hin. Warten oder den Eintrag korrigieren.
- Zu viele Versuche: Let’s Encrypt begrenzt fehlgeschlagene Versuche. Teste mit
--dry-run, bis alles passt.