Zum Hauptinhalt springen

VPS: Certbot auf Linux einrichten

Diese Anleitung wurde mit den folgenden Produkten erstellt:

(Details können je nach Produkten verschiedener Anbieter variieren, aber die Hauptkonzepte bleiben gleich)

Einführung

SSL-Zertifikate sind ein essenzieller Bestandteil des Internets und sorgen dafür, dass Daten sicher zwischen Client und Host übertragen werden können. In dieser Anleitung zeigen wir dir, wie du das Open-Source-Tool Certbot einrichtest, um kostenlose SSL-Zertifikate von der gemeinnützigen Zertifizierungsstelle Let's Encrypt anzufordern.

Vorbereitung

Um Certbot nutzen zu können, brauchst du einen Linux-Server und eine Domain, die dir gehört. Du musst Zugriff auf die DNS-Einstellungen der Domain haben und musst für jede Root-Domain oder Subdomain, die du verwenden möchtest, einen A DNS-Eintrag anlegen, der auf die IP-Adresse deines Linux-Servers zeigt.

Certbot bietet außerdem zusätzliche Plugins, mit denen du ganz easy per "One-Click" ein Zertifikat für eine Domain einrichten kannst, das mit verschiedenen Webservern wie Nginx oder Apache funktioniert. Wir empfehlen Nginx, da es ein performanter und beliebter Open-Source-Webserver ist. Hilfe zur Einrichtung findest du in unserer Linux Reverse Proxy Anleitung.

Installation

Starte mit der Installation des Open-Source-Pakets Certbot, mit dem du kostenlose SSL-Zertifikate von Let's Encrypt anfordern kannst.

sudo apt install certbot

Nachdem Certbot installiert ist, kannst du Zertifikate für deine Domain(s) anfordern. Let's Encrypt und Certbot bieten verschiedene ACME-Challenges, um den Besitz der Domain zu verifizieren.

Wir empfehlen dringend die Standardmethode HTTP-01, da sie automatische Erneuerungen ermöglicht. Falls du damit Probleme hast, kannst du alternativ die DNS-01 Methode nutzen, die manuell ist und keine automatische Erneuerung unterstützt, da sie auf der Verifizierung über einen TXT DNS-Eintrag basiert.

Nutze Webserver-Plugins

Wenn du einen Webserver wie Nginx, Apache oder deinen eigenen Webserver nutzt, empfehlen wir dir, direkt zum Abschnitt Webserver-Plugins weiter unten zu springen. Dort zeigen wir, wie du zusätzliche Certbot-Plugins für diese Webserver nutzt, um eine "One-Click"-Installation zu machen und Zertifikate anzufordern, ohne den Webserver stoppen zu müssen.

HTTP-01 Challenge

Mit installiertem Certbot kannst du jetzt Zertifikate für deine Domain(s) anfordern. In diesem Beispiel verwenden wir den Standalone-Modus, bei dem Certbot einen temporären Webserver startet, um die notwendigen Aktionen durchzuführen. Das bedeutet, dass du Port 80 in deiner Firewall öffnen musst und keine anderen Webserver oder Dienste auf Port 80 laufen dürfen, damit der temporäre Webserver starten und die Challenge abgerufen werden kann (daher das HTTP im Namen der Challenge).

Im folgenden Befehl nutzt du den Parameter --standalone, um Certbot mitzuteilen, dass du den temporären Webserver verwenden möchtest.

# Für Root-Domains
certbot certonly --standalone -d [deine_root_domain] -d www.[deine_root_domain]

# Für Subdomains
certbot certonly --standalone -d [deine_domain]

# Interaktive Einrichtung
certbot certonly --standalone

Nach Ausführung des Befehls wirst du eventuell durch eine erste interaktive Einrichtung geführt, bei der du eine E-Mail-Adresse für die Zertifikatskommunikation eingeben musst, gefolgt von einer optionalen Mailingliste und den AGB, denen du zustimmen musst.

Certbot generiert nun eine ACME-Challenge und hostet sie über den temporären Webserver. Die Let's Encrypt-Server versuchen dann, diese von deinem Server abzurufen. Bei Erfolg werden die Zertifikate erstellt und unter /etc/letsencrypt/live/[deine_domain] gespeichert.

Du kannst die SSL-Zertifikate jetzt überall dort nutzen, wo du sie brauchst, indem du einfach den lokalen Pfad zu den Zertifikaten angibst.

TXT DNS-Eintrag

Falls du Probleme hast, deine Domain über die HTTP-01 Methode zu verifizieren, kannst du alternativ die DNS-01 Methode nutzen. Dabei erstellst du einen TXT DNS-Eintrag mit einem von Let's Encrypt vorgegebenen Wert.

Wie bereits erwähnt, unterstützt diese Methode keine automatische Erneuerung, außer du richtest eine eigene Infrastruktur dafür ein. Deshalb empfehlen wir, wenn möglich, die HTTP-01 Methode zu verwenden.

Im folgenden Befehl nutzt du den Parameter --preferred-challenges, um Certbot mitzuteilen, dass du die DNS-01 Methode verwenden möchtest.

# Für Root-Domains
certbot certonly --preferred-challenges dns-01 -d [deine_root_domain] -d www.[deine_root_domain] --manual -m [deine_root_domain] -m www.[deine_root_domain]

# Für Subdomains
certbot certonly --preferred-challenges dns-01 -d [deine_domain] --manual -m [deine_domain]

# Interaktive Einrichtung
certbot certonly --preferred-challenges dns-01

Nach Ausführung des Befehls wirst du eventuell durch eine erste interaktive Einrichtung geführt, bei der du eine E-Mail-Adresse für die Zertifikatskommunikation eingeben musst, gefolgt von einer optionalen Mailingliste und den AGB, denen du zustimmen musst.

Certbot gibt dir nun Anweisungen, wie du einen TXT DNS-Eintrag mit einem bestimmten Wert anlegen musst. Das Ziel ist in der Regel _acme-challenge. vorangestellt an deine Domain (in diesem Beispiel wäre das _acme-challenge.zapdocs.example.com). Den Wert findest du in der Konsole.

Nachdem du den Eintrag erstellt hast, drücke Enter, um fortzufahren. Wenn alles korrekt ist und sich der Eintrag propagiert hat, werden die Zertifikate erstellt und unter /etc/letsencrypt/live/[deine_domain] gespeichert.

Hinweis

Bitte hab Geduld, da DNS-Änderungen etwas Zeit brauchen, um sich zu verbreiten. Normalerweise dauert das nur wenige Minuten, in seltenen Fällen kann es aber auch länger dauern.

Du kannst die SSL-Zertifikate jetzt überall dort nutzen, wo du sie brauchst, indem du einfach den lokalen Pfad zu den Zertifikaten angibst.

Webserver-Plugins

Certbot bietet verschiedene zusätzliche Webserver-Plugins, die das Zertifikatsmanagement noch einfacher machen, da die Plugins automatisch die relevanten Server-Blöcke anpassen. Um ein Plugin zu nutzen, fügst du einfach den entsprechenden Parameter zu deinem certbot Befehl hinzu.

Beide Methoden nutzen die HTTP-01 Challenge und funktionieren im Grunde gleich. Wenn ein Plugin verwendet wird, sucht Certbot zuerst den passenden Server-Block, der die angefragte Domain als server_name enthält. Dann generiert Certbot eine ACME-Challenge und fügt einen temporären location /.well-known/acme-challenge/... Block in die Server-Block-Konfiguration ein.

Die Let's Encrypt-Server versuchen dann, die Challenge von deinem Server abzurufen. Bei Erfolg wird dein Zertifikat generiert und die Server-Block-Konfiguration des Webservers automatisch angepasst, um HTTPS (Port 443) zu nutzen und die Pfade zu den neuen Zertifikaten einzutragen.

Nginx Plugin

Bevor du das Plugin nutzt, stelle sicher, dass es installiert ist.

sudo apt install python3-certbot-nginx

Um das Nginx-Plugin zu verwenden, nutze den Parameter --nginx in deinem Befehl wie folgt.

# Für Root-Domains
certbot --nginx -d [deine_root_domain] -d www.[deine_root_domain]

# Für Subdomains
certbot --nginx -d [deine_domain]

# Interaktive Einrichtung
certbot --nginx
Tipp

Wenn du automatische "One-Click" Anpassungen der Server-Blöcke durch Certbot deaktivieren möchtest, kannst du den Parameter certonly hinzufügen, z.B. certbot certonly.

Automatische Erneuerung

In den meisten Fällen richtet Certbot die automatische Erneuerung der Zertifikate für dich ein, z.B. über einen Cronjob oder systemd-Timer. Du kannst das testen, indem du folgenden Befehl mit dem Parameter --dry-run ausführst.

certbot renew --dry-run
Tipp

Wie bereits erwähnt, unterstützt die DNS-01 Methode keine automatische Erneuerung via Certbot, außer du richtest eine eigene Infrastruktur dafür ein. Deshalb empfehlen wir, wenn möglich, die HTTP-01 Methode.

Wenn alles passt, sollte der Test erfolgreich sein. Wenn du die automatische Erneuerung prüfen oder anpassen möchtest, findest du den entsprechenden Befehl in einer der folgenden Locations: /etc/crontab/, /etc/cron.*/* oder über systemctl list-timers.

Manuelle Cronjob-Einrichtung

Falls die automatische Erneuerung nicht eingerichtet ist, kannst du sie selbst per Cronjob anlegen. Öffne die Crontab mit crontab -e. Falls du das zum ersten Mal machst, wirst du aufgefordert, einen Editor auszuwählen. Wähle die erste Option, normalerweise /bin/nano.

Im geöffneten Nano-Editor fügst du folgende Zeile hinzu, um die Erneuerung täglich um 6 Uhr morgens lokal auszuführen.

0 6 * * * certbot renew

Speichere die Datei und beende Nano mit CTRL + X, bestätige mit Y und drücke ENTER.

Fazit

Du hast Certbot erfolgreich für deine Domain(s) eingerichtet – egal ob im Standalone-Modus, per Webroot oder mit einem der Plugins – und sorgst so für sichere Datenübertragung via HTTPS auf deiner Website. Bei Fragen oder Problemen steht dir unser Support-Team täglich zur Seite! 🙂