> Die vollständige Liste der Artikel steht in [llms.txt](https://docs.f3cloud.com/llms.txt). Jede Seite gibt es auch als Markdown, dazu einfach .md an die Adresse anhängen. Diese Seite als Markdown: [https://docs.f3cloud.com/de/software-setup/lets-encrypt-ssl-nginx-apache.md](https://docs.f3cloud.com/de/software-setup/lets-encrypt-ssl-nginx-apache.md).

# Kostenloses SSL-Zertifikat von Let's Encrypt für Nginx und Apache mit Certbot

So erhalten Sie kostenlos ein SSL-Zertifikat von Let's Encrypt mit Certbot für eine Website auf Nginx oder Apache. Ausstellung und HTTPS mit einem einzigen Befehl, automatische Verlängerung, Prüfung der Laufzeit, mehrere Domains und die häufigsten Fehler.

Ein **SSL-Zertifikat** brauchen Sie, damit Ihre Website über das sichere Protokoll HTTPS erreichbar ist. Dann werden die Daten zwischen Besucher und Server verschlüsselt, und der Browser zeigt neben der Adresse ein Schloss statt der Warnung „Nicht sicher“.

**Let's Encrypt** stellt solche Zertifikate kostenlos aus, und das Programm **Certbot** holt sie ab, bindet sie selbst in Nginx oder Apache ein und verlängert sie später auch selbst. Alle Befehle unten haben wir unter Debian 12 geprüft, unter Ubuntu funktionieren sie genauso.

***

### Was Sie vorab brauchen

* Eine **Domain**, deren A-Record auf die IP-Adresse des Servers zeigt. Prüfen können Sie das mit dem Befehl `getent hosts example.com`, er sollte die IP Ihres Servers anzeigen.
* Die **Website ist bereits erreichbar** unter `http://ihre-domain` auf Nginx oder Apache. Wie Sie Nginx einrichten, erklären wir in einem [eigenen Artikel](https://docs.f3cloud.com/de/software-setup/nginx-installation.md).
* Ein offener **Port 80**, denn Let's Encrypt prüft die Domain genau über diesen Port. Wenn eine Firewall aktiv ist, öffnen Sie die Ports 80 und 443, wie im Artikel [über die Firewall](https://docs.f3cloud.com/de/client-area/protect-vps-from-unauthorised-access/firewall.md) gezeigt.

> **Wenn die Domain einen AAAA-Record hat.**
>
> Let's Encrypt prüft die Domain zuerst über IPv6. Wenn der AAAA-Record auf einen anderen Server zeigt oder die Website für IPv6 nicht eingerichtet ist, schlägt die Prüfung fehl. Tragen Sie im AAAA-Record die IPv6-Adresse dieses Servers ein oder löschen Sie den Eintrag.

***

### 1. Certbot installieren

#### Nginx

```bash
# Certbot und sein Modul für Nginx installieren
apt update && apt install -y certbot python3-certbot-nginx
```

#### Apache

```bash
# Certbot und sein Modul für Apache installieren
apt update && apt install -y certbot python3-certbot-apache
```

***

### 2. Zertifikat ausstellen

Ein einziger Befehl holt das Zertifikat, bindet es in die Website ein und aktiviert die Weiterleitung von `http://` auf `https://`. Geben Sie mit `-d` alle Adressen der Website an, in der Regel die Domain mit und ohne `www`.

#### Nginx

```bash
certbot --nginx -d example.com -d www.example.com
```

<figure><img src="https://docs.f3cloud.com/img/ssl-nginx-issue.png" alt="Erfolgreiche Ausstellung des Zertifikats mit certbot --nginx"><figcaption><p>Das Zertifikat ist ausgestellt und in Nginx eingebunden</p></figcaption></figure>

#### Apache

```bash
certbot --apache -d example.com -d www.example.com
```

<figure><img src="https://docs.f3cloud.com/img/ssl-apache-issue.png" alt="Erfolgreiche Ausstellung des Zertifikats mit certbot --apache"><figcaption><p>Das Zertifikat ist ausgestellt und in Apache eingebunden</p></figcaption></figure>

Beim ersten Start stellt Certbot einige Fragen:

1. **E-Mail** – an diese Adresse gehen wichtige Benachrichtigungen zum Konto.
2. **Nutzungsbedingungen von Let's Encrypt** – geben Sie `Y` ein, um sie zu akzeptieren.
3. **Newsletter der EFF** – nach Wunsch, Sie können mit `N` antworten.

Wenn am Ende `Congratulations! You have successfully enabled HTTPS` steht, ist alles fertig. Öffnen Sie die Website unter `https://ihre-domain`, neben der Adresse erscheint ein Schloss.

Certbot hat die nötigen Zeilen selbst in die Einstellungen der Website eingetragen, sie sind mit dem Kommentar `# managed by Certbot` markiert. Bei Nginx ist das die Datei der Website in `/etc/nginx/sites-available`.\
Bei Apache erscheint neben Ihrer Datei eine neue mit der Endung `-le-ssl.conf`.

***

### 3. Zertifikat prüfen

```bash
# Alle Zertifikate auf dem Server anzeigen
certbot certificates
```

<figure><img src="https://docs.f3cloud.com/img/ssl-certificates.png" alt="Liste der Zertifikate mit Ablaufdatum"><figcaption><p>Das Zertifikat ist noch 89 Tage gültig</p></figcaption></figure>

In der Zeile **Expiry Date** sehen Sie das Ablaufdatum.\
In Klammern hinter `VALID` steht, wie viele Tage das Zertifikat noch gültig ist.

Darunter stehen die Pfade zu den Dateien von Zertifikat und Schlüssel, falls Sie diese für andere Programme brauchen.

***

### 4. Prüfen, ob die Verlängerung funktioniert

Zertifikate von Let's Encrypt werden für einen kurzen Zeitraum ausgestellt. Derzeit sind es 90 Tage, und bis 2028 wird Let's Encrypt die Laufzeit schrittweise auf 45 Tage verkürzen. Manuell müssen Sie nichts verlängern. Certbot prüft die Zertifikate zweimal täglich und erneuert selbst diejenigen, deren Laufzeit bald endet.

Prüfen Sie mit einem Testlauf, ob die Verlängerung klappt. Er verändert nichts auf dem Server.

```bash
# Testweise Verlängerung aller Zertifikate
certbot renew --dry-run
```

<figure><img src="https://docs.f3cloud.com/img/ssl-renew-dry-run.png" alt="Erfolgreiche Testverlängerung des Zertifikats"><figcaption><p>Die Testverlängerung war erfolgreich</p></figcaption></figure>

Wenn am Ende `Congratulations, all simulated renewals succeeded` steht, wird sich das Zertifikat selbst verlängern.

***

### Mehrere Domains auf einem Server

Starten Sie Certbot für jede Website separat und geben Sie jeweils ihre Domains an. Um einem bereits ausgestellten Zertifikat eine neue Adresse hinzuzufügen, nennen Sie alle bisherigen Adressen und die neue und ergänzen den Schalter `--expand`.

```bash
# Subdomain shop zum Zertifikat von example.com hinzufügen
certbot --nginx --expand -d example.com -d www.example.com -d shop.example.com
```

> **Limits von Let's Encrypt.**
>
> Für dieselbe Gruppe von Domains lässt sich ein Zertifikat höchstens 5 Mal in 7 Tagen ausstellen.\
> Pro Domain sind höchstens 5 fehlgeschlagene Prüfungen pro Stunde erlaubt.
>
> Wenn also etwas nicht klappt, suchen Sie zuerst im Abschnitt unten nach der Ursache und starten Sie Certbot erst danach erneut.

***

### Zertifikat erhalten, ohne den Server zu konfigurieren

Wenn Sie das Zertifikat selbst einbinden möchten oder ein anderes Programm es braucht, verwenden Sie `certonly`. Certbot holt dann nur das Zertifikat und ändert nichts an den Einstellungen.

#### Über Nginx oder Apache

```bash
# Certbot besteht die Prüfung selbst über den laufenden Webserver.
# Für Apache --nginx durch --apache ersetzen
certbot certonly --nginx -d example.com
```

#### Über den Ordner der Website

```bash
# Funktioniert mit jedem Webserver. Geben Sie in -w den Ordner an,
# aus dem die Website ihre Dateien ausliefert
certbot certonly --webroot -w /var/www/example.com -d example.com
```

#### Ohne Webserver

```bash
# Certbot belegt kurzzeitig selbst Port 80. Wenn dort ein
# Webserver läuft, halten Sie ihn vorher an
certbot certonly --standalone -d example.com
```

Die fertigen Dateien liegen im Ordner `/etc/letsencrypt/live/example.com/`. Die Datei `fullchain.pem` ist das Zertifikat.\
Die Datei `privkey.pem` ist der private Schlüssel, den Sie niemals weitergeben dürfen.

***

### Häufige Fehler

<details>

<summary>Timeout during connect (likely firewall problem)</summary>

Let's Encrypt konnte sich nicht über Port 80 mit dem Server verbinden. Meistens blockiert ihn die Firewall. Öffnen Sie die Ports 80 und 443 und starten Sie Certbot erneut. Ob der Webserver überhaupt auf Port 80 lauscht, prüfen Sie mit dem Befehl `ss -tlnp | grep ':80 '`.

</details>

<details>

<summary>DNS problem: NXDOMAIN looking up A</summary>

Die Domain hat keinen A-Record. Legen Sie ihn bei Ihrem Domain-Registrar mit der IP-Adresse des Servers an. Ein neuer Eintrag wirkt nicht sofort, manchmal müssen Sie etwas warten. Prüfen Sie das Ergebnis mit dem Befehl `getent hosts example.com` und starten Sie erst danach Certbot.

</details>

<details>

<summary>unauthorized: Invalid response … 404</summary>

Let's Encrypt hat die Domain aufgerufen, die Prüfdatei aber nicht gefunden. Meistens zeigt die Domain auf einen anderen Server, zum Beispiel ist der A-Record noch vom alten Hosting übrig, oder der AAAA-Record zeigt an die falsche Stelle. Vergleichen Sie die IP im DNS mit der IP Ihres Servers. Wenn Sie `--webroot` verwenden, prüfen Sie, ob in `-w` der Ordner angegeben ist, aus dem die Website ihre Dateien ausliefert.

</details>

<details>

<summary>Could not automatically find a matching server block</summary>

Das Zertifikat wurde ausgestellt, aber Certbot hat in den Einstellungen von Nginx keine Website mit dieser Domain gefunden. Tragen Sie die Domain in die Direktive `server_name` in den Einstellungen der Website ein, prüfen Sie diese mit dem Befehl `nginx -t`, laden Sie Nginx neu und binden Sie das bereits ausgestellte Zertifikat mit dem Befehl `certbot install --cert-name example.com` ein.

</details>

<details>

<summary>too many certificates oder too many failed authorizations</summary>

Die Limits von Let's Encrypt haben gegriffen, und Sie müssen warten, bis sie zurückgesetzt werden.\
Das Limit für fehlgeschlagene Prüfungen gilt eine Stunde.\
Das Limit für die erneute Ausstellung gilt eine Woche.

Um Ihre Einstellungen in Ruhe zu testen, starten Sie Certbot mit dem Schalter `--dry-run`, denn Testläufe zählen nicht zu den echten Limits.

</details>

<details>

<summary>Das Zertifikat ist abgelaufen und hat sich nicht selbst verlängert</summary>

Verlängern Sie es manuell mit dem Befehl `certbot renew` und achten Sie darauf, ob Fehler erscheinen. Meistens steckt eines der Probleme von oben dahinter, zum Beispiel ein geschlossener Port 80. Ob der Timer für die Verlängerung aktiv ist, prüfen Sie mit dem Befehl `systemctl list-timers | grep certbot`.\
Details zu den letzten Läufen stehen in der Datei `/var/log/letsencrypt/letsencrypt.log`.

</details>

<details>

<summary>Kann ich ein Zertifikat für alle Subdomains auf einmal bekommen?</summary>

Ja, das ist ein Wildcard-Zertifikat in der Form `*.example.com`. Dafür prüft Let's Encrypt die Domain aber über einen DNS-Eintrag und nicht über die Website, deshalb passen die Methoden aus diesem Artikel nicht. Meistens ist es einfacher, ein Zertifikat für die benötigten Subdomains mit mehreren `-d`-Schaltern auszustellen.

</details>

***

### Unsere Ressourcen

**Telegram-Kanal:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Hosting-Website:** [https://f3cloud.com](https://f3cloud.com/de)
