> For the complete documentation index, see [llms.txt](https://docs.instantroot.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.instantroot.de/kvm-server/linux/certbot-und-lets-encrypt-installieren.md).

# Certbot und Let’s Encrypt installieren

Let’s Encrypt stellt kostenlose SSL-Zertifikate bereit. Mit Certbot kannst du diese Zertifikate auf deinem KVM-Server automatisch anfordern, einrichten und verlängern.

Ein SSL-Zertifikat wird benötigt, damit deine Webseite über HTTPS erreichbar ist. HTTPS verschlüsselt die Verbindung zwischen dem Besucher und deiner Webseite.

### Voraussetzungen

Bevor du Certbot installierst, sollten folgende Punkte erledigt sein:

* dein KVM-Server ist erreichbar
* du hast Root- oder sudo-Zugriff
* eine Domain zeigt auf die IP-Adresse deines Servers
* ein Webserver wie Nginx oder Apache ist installiert
* Port `80` und Port `443` sind in der Firewall geöffnet

Beispiel:

| Port  | Zweck                                                   |
| ----- | ------------------------------------------------------- |
| `80`  | HTTP, wird für die Prüfung durch Let’s Encrypt benötigt |
| `443` | HTTPS, wird für die verschlüsselte Webseite benötigt    |

**Wichtig:** Let’s Encrypt kann ein Zertifikat nur ausstellen, wenn die Domain korrekt auf deinen Server zeigt und von außen erreichbar ist.

### Domain prüfen

Bevor du ein Zertifikat anforderst, prüfe, ob deine Domain auf deinen Server zeigt.

Wenn deine Server-IP zum Beispiel `123.123.123.123` ist, sollte deine Domain per A-Record auf diese IP-Adresse zeigen.

Beispiel:

| Typ | Name  | Ziel              |
| --- | ----- | ----------------- |
| A   | `@`   | `123.123.123.123` |
| A   | `www` | `123.123.123.123` |

Wenn du IPv6 verwendest, kann zusätzlich ein AAAA-Record gesetzt werden.

DNS-Änderungen sind nicht immer sofort aktiv. Es kann einige Minuten bis mehrere Stunden dauern, bis die Änderung überall übernommen wurde.

### Webserver prüfen

Certbot arbeitet meistens mit einem vorhandenen Webserver zusammen.

Häufig verwendet werden:

* Nginx
* Apache

Prüfe zuerst, welchen Webserver du verwendest.

Nginx prüfen:

`systemctl status nginx`

Apache prüfen:

`systemctl status apache2`

Wenn der Dienst läuft, sollte der Status als aktiv angezeigt werden.

### Firewall prüfen

Damit Let’s Encrypt deine Domain prüfen kann, muss Port `80` erreichbar sein.

Für die spätere HTTPS-Verbindung muss Port `443` erreichbar sein.

Wenn du UFW nutzt, kannst du die Ports so freigeben:

`ufw allow 80/tcp`

`ufw allow 443/tcp`

Status prüfen:

`ufw status`

### Certbot unter Debian oder Ubuntu installieren

Aktualisiere zuerst die Paketlisten:

`apt update`

Installiere danach Certbot.

Grundpaket:

`apt install certbot`

Je nach Webserver installierst du zusätzlich das passende Plugin.

Für Nginx:

`apt install python3-certbot-nginx`

Für Apache:

`apt install python3-certbot-apache`

### Zertifikat für Nginx erstellen

Wenn du Nginx verwendest, kannst du Certbot direkt mit dem Nginx-Plugin ausführen.

Befehl:

`certbot --nginx`

Certbot sucht vorhandene Nginx-Konfigurationen und fragt dich, für welche Domain ein Zertifikat erstellt werden soll.

Wenn du eine bestimmte Domain angeben möchtest:

`certbot --nginx -d deinedomain.de -d www.deinedomain.de`

Danach fragt Certbot normalerweise nach:

* E-Mail-Adresse
* Zustimmung zu den Nutzungsbedingungen
* optionaler Weiterleitung von HTTP auf HTTPS

Wähle die HTTPS-Weiterleitung, wenn deine Webseite dauerhaft verschlüsselt erreichbar sein soll.

### Zertifikat für Apache erstellen

Wenn du Apache verwendest, nutzt du das Apache-Plugin.

Befehl:

`certbot --apache`

Für eine bestimmte Domain:

`certbot --apache -d deinedomain.de -d www.deinedomain.de`

Certbot passt die Apache-Konfiguration automatisch an, wenn eine passende VirtualHost-Konfiguration gefunden wird.

### Nur Zertifikat erstellen ohne automatische Webserver-Anpassung

Wenn Certbot deinen Webserver nicht automatisch ändern soll, kannst du nur ein Zertifikat erstellen.

Dafür wird häufig der Webroot-Modus verwendet.

Beispiel:

`certbot certonly --webroot -w /var/www/html -d deinedomain.de -d www.deinedomain.de`

Dabei ist `/var/www/html` das Webverzeichnis deiner Webseite.

Diese Variante ist sinnvoll, wenn du deine Webserver-Konfiguration selbst verwalten möchtest.

### Zertifikat testen

Nach erfolgreicher Einrichtung sollte deine Webseite über HTTPS erreichbar sein.

Öffne im Browser:

`https://deinedomain.de`

Prüfe außerdem:

* wird ein Schloss-Symbol angezeigt?
* wird die richtige Domain angezeigt?
* wird keine Zertifikatswarnung angezeigt?
* funktioniert auch `https://www.deinedomain.de`, falls eingerichtet?

### Automatische Verlängerung

Let’s Encrypt Zertifikate sind zeitlich begrenzt und müssen regelmäßig verlängert werden.

Certbot richtet auf modernen Systemen meistens automatisch eine Verlängerung per Timer oder Cronjob ein.

Du kannst die automatische Verlängerung testen:

`certbot renew --dry-run`

Wenn dieser Test erfolgreich ist, sollte die automatische Verlängerung funktionieren.

### Zertifikate anzeigen

Alle von Certbot verwalteten Zertifikate kannst du so anzeigen:

`certbot certificates`

Dort siehst du unter anderem:

* Domainnamen
* Ablaufdatum
* Speicherort des Zertifikats
* verwendete Zertifikatsdateien

### Zertifikat manuell verlängern

Normalerweise ist keine manuelle Verlängerung nötig.

Falls du sie trotzdem ausführen möchtest:

`certbot renew`

Wenn ein Zertifikat noch nicht erneuert werden muss, überspringt Certbot es automatisch.

### HTTPS erzwingen

Wenn deine Webseite immer über HTTPS erreichbar sein soll, solltest du HTTP auf HTTPS weiterleiten.

Bei Certbot mit Nginx oder Apache kannst du diese Weiterleitung oft direkt während der Einrichtung auswählen.

Wenn du sie manuell einrichtest, achte darauf, dass:

* Port `80` weiterhin erreichbar bleibt
* HTTP-Anfragen korrekt auf HTTPS weiterleiten
* keine Weiterleitungsschleife entsteht
* alle Domains im Zertifikat enthalten sind

### Häufige Probleme

#### Domain zeigt nicht auf den Server

Wenn die Domain nicht auf die richtige IP-Adresse zeigt, kann Let’s Encrypt kein Zertifikat ausstellen.

Prüfe:

* A-Record für IPv4
* AAAA-Record für IPv6, falls genutzt
* richtige IP-Adresse
* DNS-Änderung bereits aktiv
* Domain ohne Tippfehler

#### Port 80 ist blockiert

Let’s Encrypt muss deine Domain über HTTP prüfen können.

Wenn Port `80` blockiert ist, schlägt die Prüfung fehl.

Prüfe:

* Firewall auf dem Server
* Firewall-Regeln im Betriebssystem
* Webserver läuft
* Port `80` ist geöffnet
* Domain zeigt auf den richtigen Server

#### Webserver läuft nicht

Wenn Nginx oder Apache nicht gestartet ist, kann Certbot die Prüfung nicht abschließen.

Nginx starten:

`systemctl start nginx`

Apache starten:

`systemctl start apache2`

Status prüfen:

`systemctl status nginx`

oder:

`systemctl status apache2`

#### Falsche Webserver-Konfiguration

Wenn Certbot keine passende Domain in deiner Webserver-Konfiguration findet, kann die automatische Einrichtung fehlschlagen.

Prüfe bei Nginx:

* existiert ein Serverblock für die Domain?
* steht die Domain bei `server_name`?
* zeigt der Serverblock auf das richtige Webverzeichnis?

Prüfe bei Apache:

* existiert ein VirtualHost für die Domain?
* ist `ServerName` korrekt gesetzt?
* ist `ServerAlias` für `www` gesetzt, falls benötigt?
* zeigt `DocumentRoot` auf das richtige Verzeichnis?

#### Too many certificates

Let’s Encrypt hat Limits für Zertifikatsausstellungen.

Wenn du sehr oft Zertifikate für dieselbe Domain anforderst, kann ein Rate Limit erreicht werden.

Vermeide deshalb unnötige Wiederholungen.

Teste Änderungen zuerst mit:

`certbot renew --dry-run`

#### Zertifikat ist abgelaufen

Wenn ein Zertifikat abgelaufen ist, hat die automatische Verlängerung möglicherweise nicht funktioniert.

Prüfe:

`certbot certificates`

Teste die Verlängerung:

`certbot renew --dry-run`

Prüfe außerdem:

* läuft der Webserver?
* ist Port `80` erreichbar?
* wurde die Domain geändert?
* wurde die Webserver-Konfiguration verändert?
* blockiert eine Firewall die Prüfung?

#### HTTPS funktioniert, aber Webseite lädt falsch

Wenn deine Webseite über HTTPS erreichbar ist, aber Inhalte fehlen oder Warnungen erscheinen, kann Mixed Content die Ursache sein.

Mixed Content bedeutet, dass deine HTTPS-Webseite noch Inhalte über HTTP lädt.

Beispiele:

* Bilder über `http://`
* CSS-Dateien über `http://`
* JavaScript-Dateien über `http://`

Passe diese URLs in deiner Anwendung oder deinem CMS auf HTTPS an.

### Speicherorte der Zertifikate

Certbot speichert Zertifikate normalerweise unter:

`/etc/letsencrypt/live/deinedomain.de/`

Dort findest du unter anderem:

| Datei           | Bedeutung                  |
| --------------- | -------------------------- |
| `cert.pem`      | Zertifikat                 |
| `chain.pem`     | Zertifikatskette           |
| `fullchain.pem` | Zertifikat inklusive Kette |
| `privkey.pem`   | privater Schlüssel         |

**Wichtig:** Gib `privkey.pem` niemals weiter. Diese Datei ist der private Schlüssel deines Zertifikats.

### Zertifikat löschen

Wenn du ein Zertifikat nicht mehr benötigst, kannst du es löschen.

Zuerst Zertifikate anzeigen:

`certbot certificates`

Dann Zertifikat löschen:

`certbot delete --cert-name deinedomain.de`

Lösche ein Zertifikat nur, wenn du sicher bist, dass es nicht mehr verwendet wird.

### Support kontaktieren

Wenn die Einrichtung nicht funktioniert, kontaktiere den Support.

Gib dabei bitte folgende Informationen an:

* Domain
* Server-IP
* Betriebssystem
* verwendeter Webserver: Nginx oder Apache
* verwendeter Certbot-Befehl
* genaue Fehlermeldung
* ob Port `80` und `443` geöffnet sind
* ob die Domain bereits auf den Server zeigt

**Sicherheit:** Sende niemals private Schlüssel, Passwörter oder vollständige Zugangsdaten an den Support.
