SSL-Zertifikat auf dem VPS einrichten: Let's Encrypt Schritt für Schritt
So richtest du ein SSL-Zertifikat auf deinem VPS ein: Let's Encrypt mit Certbot, automatische Erneuerung, Wildcard, typische Fehler und sichere TLS-Konfiguration.
Halloween at Nexthosting: 10% off game servers with the code – until November 1
So richtest du ein SSL-Zertifikat auf deinem VPS ein: Let's Encrypt mit Certbot, automatische Erneuerung, Wildcard, typische Fehler und sichere TLS-Konfiguration.
Für ein SSL-Zertifikat auf deinem VPS brauchst du nur drei Dinge: eine Domain, die per DNS auf die IP deines Servers zeigt, einen Webserver wie Nginx oder Apache und einen ACME-Client wie Certbot. Damit holst du dir in wenigen Minuten ein kostenloses Zertifikat von Let’s Encrypt und lässt es danach automatisch erneuern. Hier erfährst du, wie das Schritt für Schritt funktioniert, welche Zertifikatsart zu deinem Projekt passt, warum die Laufzeiten bald deutlich kürzer werden und wie du die typischen Fehler beim Ausstellen vermeidest. Das gilt für eine Firmenwebsite genauso wie für das Webpanel deines FiveM-Servers oder die Online-Karte deines Minecraft-Servers.
certbot --nginx ausführen, fertig.Ein SSL-Zertifikat, technisch korrekt heute ein TLS-Zertifikat, erfüllt zwei Aufgaben. Erstens verschlüsselt es die Verbindung zwischen Browser und Server, damit niemand Passwörter, Formulardaten oder Session-Cookies mitlesen kann. Zweitens bestätigt es die Identität: Der Browser prüft, ob das Zertifikat für genau diese Domain ausgestellt wurde, ob es noch gültig ist und ob es von einer vertrauenswürdigen Zertifizierungsstelle (CA) stammt. Das BSI betont in seinen Empfehlungen, dass der Client Gültigkeit, Namen und Aussteller eines Zertifikats konsequent prüfen muss. Verschlüsselung allein reicht also nicht, die Prüfung der Identität gehört dazu.
Auf einem VPS bist du selbst für diesen Teil verantwortlich. Anders als beim klassischen Webspace richtet niemand das Zertifikat automatisch für dich ein. Typische Einsatzfälle sind:
Wichtig: Das Zertifikat schützt nur die Verbindung zum Webdienst. Ein Gameserver-Port selbst, etwa der Spielverkehr von Minecraft, nutzt kein HTTPS. Für Fernwartungszugänge wie RCON brauchst du andere Schutzmaßnahmen, die wir im Beitrag zur RCON-Sicherheit für Gameserver beschreiben.
Zertifikate unterscheiden sich nicht in der Stärke der Verschlüsselung, sondern darin, wie gründlich die CA prüft, wer du bist, und für wie viele Namen sie gelten.
| Zertifikatsart | Was geprüft wird | Typischer Einsatz | Kosten |
|---|---|---|---|
| Domain Validation (DV) | Nur die Kontrolle über die Domain | Websites, APIs, Webpanels, Community-Seiten | Bei Let’s Encrypt kostenlos |
| Organization Validation (OV) | Domain plus Existenz des Unternehmens | Firmenauftritte, B2B-Portale | Kostenpflichtig bei kommerziellen CAs |
| Extended Validation (EV) | Ausführliche Prüfung der Organisation | Banken, Behördenumfeld, regulierte Branchen | Kostenpflichtig |
| Wildcard (*.domain.de) | Domain, meist per DNS-Eintrag | Viele Subdomains wie panel., map., api. | Bei Let’s Encrypt kostenlos |
| Selbstsigniert | Nichts, du stellst es selbst aus | Reine Testumgebungen, interne Dienste | Kostenlos, aber Browserwarnung |
Für Gamer, Communities und die meisten Entwickler ist die Antwort einfach: Ein DV-Zertifikat von Let’s Encrypt genügt. Browser zeigen bei DV, OV und EV heute das gleiche Schloss-Symbol. Ein OV- oder EV-Zertifikat lohnt sich vor allem dann, wenn Vertragspartner oder Compliance-Vorgaben es ausdrücklich verlangen. In der EU gibt es zusätzlich qualifizierte Webseitenzertifikate nach der eIDAS-Verordnung, die vor allem für Behörden und regulierte Bereiche relevant sind.
Die meisten Probleme beim Ausstellen entstehen nicht in Certbot, sondern davor. Prüfe diese Punkte, bevor du loslegst:
server_name mit deiner Domain in der Nginx-Konfiguration ist Voraussetzung dafür, dass Certbot den passenden Block findet.Die DNS-Änderung kann je nach TTL einige Minuten bis Stunden dauern. Mit dig +short deine-domain.de siehst du, ob die Domain schon auf die richtige IP auflöst.
Die folgende Anleitung bezieht sich auf Ubuntu oder Debian mit Nginx, der häufigsten Kombination auf einem VPS. Die offiziellen Certbot-Anleitungen der EFF bieten für andere Systeme und Webserver eigene Varianten.
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Alternativ steht auf Debian und Ubuntu ein Paket aus den Distributions-Quellen bereit (sudo apt install certbot python3-certbot-nginx), das allerdings oft eine ältere Version enthält.sudo nginx -t prüfst du, ob Nginx fehlerfrei startet. Certbot ändert die Konfiguration, und ein vorhandener Syntaxfehler lässt den Vorgang sonst scheitern.sudo certbot --nginx -d deine-domain.de -d www.deine-domain.de
Certbot fragt nach einer E-Mail-Adresse und der Zustimmung zu den Nutzungsbedingungen, validiert die Domain und trägt das Zertifikat in deinen Nginx-Block ein.return 301 https://$host$request_uri;.sudo certbot certificates siehst du alle Zertifikate samt Ablaufdatum.sudo certbot renew --dry-run
Läuft dieser Testlauf ohne Fehler, ist die automatische Erneuerung einsatzbereit.Die Zertifikatsdateien liegen danach unter /etc/letsencrypt/live/deine-domain.de/. fullchain.pem enthält Zertifikat plus Zwischenzertifikat, privkey.pem den privaten Schlüssel. Andere Dienste wie ein Node.js-Backend oder ein Mailserver können auf genau diese Pfade verweisen.
Tipp für Gameserver-Panels: Viele Webpanels laufen auf einem eigenen Port. Statt jedem Dienst ein eigenes Zertifikat zu geben, setzt du Nginx als Reverse Proxy davor: Nginx nimmt HTTPS auf Port 443 an, zum Beispiel unter panel.deine-domain.de, und leitet intern per proxy_pass an den lokalen Port des Panels weiter. Den Panel-Port selbst schließt du dann in der Firewall nach außen.
Let’s Encrypt stellt Zertifikate derzeit mit einer Gültigkeit von 90 days aus. Laut der Ankündigung „Decreasing Certificate Lifetimes to 45 Days“ halbiert die CA diese Laufzeit schrittweise bis 2028, im Gleichklang mit dem Rest der Branche. Als Zwischenschritt ist für Februar 2027 eine Standardlaufzeit von 64 days vorgesehen.
Die Begründung erklärt Let’s Encrypt auf der Seite zu den Plänen für Zertifikatslaufzeiten: Kürzere Laufzeiten begrenzen den Schaden, wenn ein Schlüssel kompromittiert oder ein Zertifikat fehlerhaft ausgestellt wurde, und sie zwingen zu einer robusten Automatisierung. Für dich als VPS-Betreiber heißt das: Wer heute noch per Kalendererinnerung erneuert, bekommt ab 2028 rund acht Erneuerungen im Jahr pro Zertifikat. Früher oder später wird eine vergessen, und dann zeigt der Browser deiner Community eine Sicherheitswarnung.
So stellst du sicher, dass die Automatik läuft:
systemctl list-timers | grep certbot zeigt, wann der nächste Lauf ansteht.--deploy-hook "systemctl reload nginx".Das zugrunde liegende ACME-Protokoll ist als IETF-Standard RFC 8555 beschrieben und automatisiert Validierung, Ausstellung und Erneuerung vollständig. Wenn du mehrere Server betreibst, lohnt es sich, die Zertifikatseinrichtung gleich in dein Provisioning aufzunehmen. Wie das mit Skripten und Konfigurationsmanagement klappt, zeigen wir im Leitfaden zur automatisierten Server-Bereitstellung.
Bevor Let’s Encrypt ein Zertifikat ausstellt, musst du beweisen, dass du die Domain kontrollierst. Dafür gibt es zwei gängige Wege.
| Kriterium | HTTP-01 | DNS-01 |
|---|---|---|
| Nachweis über | Datei auf deinem Webserver, abgerufen über Port 80 | TXT-Eintrag in der DNS-Zone |
| Port 80 nötig | Ja | Nein |
| Wildcard-Zertifikate | Nicht möglich | Möglich |
| Automatisierung | Sehr einfach mit Certbot-Plugin | Braucht API-Zugang zum DNS-Anbieter |
| Geeignet für | Einzelne Websites und Subdomains | Viele Subdomains, interne Server, gesperrter Port 80 |
Die Certbot-Dokumentation weist darauf hin, dass bei der HTTP-Validierung Port 80 von außen erreichbar sein muss, weil der Validierungsserver eine direkte Anfrage dorthin schickt. Ist das nicht möglich, etwa weil ein Dienst Port 80 belegt oder der Server nur intern erreichbar ist, ist DNS-01 die flexiblere Wahl.
Für Wildcard-Zertifikate wie *.deine-domain.de ist DNS-01 laut Let’s-Encrypt-FAQ sogar Voraussetzung. Damit die Erneuerung automatisch läuft, braucht Certbot ein DNS-Plugin für deinen DNS-Anbieter und ein API-Token. Gib diesem Token nur die Rechte, die es braucht, idealerweise beschränkt auf die eine DNS-Zone.
Ein ausgestelltes Zertifikat ist erst der Anfang. Wie sicher die Verbindung wirklich ist, entscheidet die Konfiguration. Das BSI behandelt im IT-Grundschutz-Baustein APP.3.2 Webserver die verschlüsselte Verbindung als Regelfall und verweist für die Schlüsselverwaltung auf ein eigenes Kryptokonzept. Für die Praxis auf einem VPS heißt das:
ssl_protocols TLSv1.2 TLSv1.3;). Ältere Versionen wie TLS 1.0 und 1.1 gelten als unsicher und werden von modernen Browsern nicht mehr unterstützt.Strict-Transport-Security zwingt Browser dauerhaft auf HTTPS. Aktiviere ihn erst, wenn alle Subdomains zuverlässig per HTTPS laufen, sonst sperrst du dich selbst aus.privkey.pem sollte nur für root lesbar sein. Certbot setzt das standardmäßig, aber eigene Kopien für andere Dienste verlieren diese Rechte schnell.Der private Schlüssel ist das eigentliche Geheimnis hinter deinem Zertifikat. Wer ihn besitzt, kann sich als dein Server ausgeben. Trotzdem landen Schlüssel immer wieder in Discord-Nachrichten an einen helfenden Admin, in öffentlichen GitHub-Repositories oder in Backups ohne Verschlüsselung. Das Prinzip ist dasselbe wie bei geteilten Zugangsdaten zu Online-Diensten: Was du einmal weitergibst, kontrollierst du nicht mehr. Eine gute Übersicht dazu, welche Risiken das Teilen von Zugangsdaten mit sich bringt, zeigt, warum klare Regeln dafür sinnvoll sind.
Für dein Team bedeutet das konkret: Gib Mitadmins eigene SSH-Zugänge mit eigenen Schlüsseln, statt Dateien herumzuschicken. Schließe /etc/letsencrypt aus öffentlichen Repositories per .gitignore aus. Und wenn ein Schlüssel doch einmal nach außen gelangt ist, widerrufe das Zertifikat mit certbot revoke und stelle ein neues mit frischem Schlüssel aus.
| Fehlermeldung oder Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| „Timeout during connect“ | Port 80 durch Firewall blockiert | ufw und vorgelagerte Firewall prüfen, Port 80 freigeben oder DNS-01 nutzen |
| „NXDOMAIN“ oder „DNS problem“ | Domain löst noch nicht auf | A/AAAA-Record prüfen, TTL abwarten, mit dig testen |
| Validierung schlägt nur manchmal fehl | Falscher AAAA-Record für IPv6 | AAAA-Record korrigieren oder entfernen |
| „too many certificates already issued“ | Rate-Limit nach vielen Testversuchen | Mit --staging testen, dann erst produktiv anfordern |
| Browser meldet falschen Namen | Subdomain nicht im Zertifikat | Zertifikat mit allen -d-Namen neu anfordern |
| Zertifikat abgelaufen trotz Automatik | Timer deaktiviert oder Dienst nicht neu geladen | certbot renew --dry-run, Timer und Deploy-Hook prüfen |
| Mixed-Content-Warnung | Seite lädt Skripte oder Bilder per HTTP | Alle Ressourcen auf HTTPS oder relative URLs umstellen |
Ein Hinweis zum Testen: Arbeite bei ersten Versuchen mit der Option --staging. Die Testumgebung von Let’s Encrypt hat großzügigere Limits, und du verbrennst keine Kontingente der Produktivumgebung, während du an DNS oder Firewall schraubst.
Wir sehen im Support immer wieder dasselbe Muster: Ein Zertifikat ist schnell eingerichtet, Probleme entstehen Monate später. Die Community meldet eine Browserwarnung beim Panel, und dann stellt sich heraus, dass der Erneuerungs-Timer nach einem Systemumzug nie wieder gelaufen ist oder ein neuer Dienst Port 80 belegt. Unser Rat ist deshalb: Behandle das Zertifikat nicht als einmalige Aufgabe, sondern als Teil deiner Serververwaltung. Teste die Erneuerung nach jeder größeren Änderung, überwache das Ablaufdatum und dokumentiere, welche Dienste auf welche Zertifikatsdateien zugreifen.
Auf einem VPS hast du volle Kontrolle, und genau das ist der Vorteil gegenüber vorkonfigurierten Lösungen: Du entscheidest über Webserver, Reverse Proxy, Protokolle und Validierungsmethode. Mit der Verkürzung auf 45 days wird saubere Automatisierung zur Grundvoraussetzung, nicht zum Extra. Wer das jetzt sauber aufsetzt, hat 2028 keinen zusätzlichen Aufwand.
— Erik
Wenn du einen Server für Website, API oder Community-Panel suchst, findest du bei uns VPS mit NVMe-SSD und DDoS-Schutz im deutschen Rechenzentrum. Der Einstieg mit VPS Einfach liegt bei €6.49 im Monat, VPS Standard kostet €10.90, VPS Pro €18.90 und VPS Ultra €32.90 per month. Mit vollem Root-Zugriff richtest du Nginx, Certbot und dein Zertifikat genau so ein, wie in dieser Anleitung beschrieben. Die passende Domain für dein Zertifikat bekommst du bei Nexthosting ab €0.99 im Monat. Was ein VPS in Deutschland insgesamt kostet, haben wir in unserem Überblick zu VPS-Kosten in Deutschland aufgeschlüsselt, und warum der Standort für Datenschutz und Ping zählt, liest du im Beitrag zum Serverstandort Deutschland.
Du willst dich nicht selbst um Server und Zertifikate kümmern, sondern nur eine Website betreiben? Dann ist WordPress-Hosting oder klassischer Webspace die bequemere Wahl.
Ja, ein Domain-validiertes Zertifikat von Let’s Encrypt kostet nichts und ist für Websites, APIs und Webpanels voll ausreichend. Kosten entstehen nur, wenn du ein OV- oder EV-Zertifikat einer kommerziellen Zertifizierungsstelle brauchst. Die Verschlüsselung ist bei allen Varianten gleich stark.
Aktuell 90 days. Let’s Encrypt verkürzt die Laufzeit schrittweise, mit 64 days als Zwischenschritt ab Februar 2027 und 45 days bis 2028. Mit eingerichteter automatischer Erneuerung merkst du davon im Alltag nichts.
Für Einsteiger ist der Weg über eine Domain der praktikable Standard, denn Certbot und die üblichen Anleitungen setzen einen Domainnamen voraus. Eine günstige Domain mit einem A-Record auf deine VPS-IP löst das Problem in wenigen Minuten. Selbstsignierte Zertifikate für reine IP-Adressen führen zu Browserwarnungen und eignen sich nur für Tests.
Nein. Du kannst mehrere Namen in ein Zertifikat aufnehmen, indem du Certbot mehrere -d-Parameter übergibst. Bei vielen wechselnden Subdomains ist ein Wildcard-Zertifikat per DNS-01-Validierung die elegantere Lösung.
Browser zeigen eine deutliche Sicherheitswarnung, und viele Besucher brechen an dieser Stelle ab. APIs und Apps verweigern die Verbindung oft komplett. Prüfe in dem Fall mit certbot renew --dry-run, woran die Erneuerung scheitert, und behebe die Ursache, bevor du manuell neu ausstellst.