SSL Zertifikate - Certbot
SSL Zertifikate
Certbot ist eine kostenlose Lösung zur Ausstellung von SSL/TLS-Zertifikaten über Let’s Encrypt, die eine sichere HTTPS-Verbindung für Websites ermöglicht. Im Vergleich zu kostenpflichtigen Anbietern, die oft zusätzliche Verwaltungsaufwände und wiederkehrende Kosten mit sich bringen, bietet Certbot eine automatisierte, kostenlose Alternative, die die Verwaltung von Zertifikaten vereinfacht und laufende Erneuerungen übernimmt.
Einrichtung
Es wird empfohlen Certbot → nativ auf dem Host zu installieren, einmalig Zertifikate darüber zu beziehen und als Volume in den nginx-Container einzubinden.
1. Certbot installieren
Voraussetzung
→ ALMA / Rocky Linux als Host
→ Docker nach Anleitung installiert
→ Relution nach Anleitung konfiguriert
Certbot kann mittels folgendem Befehl installieren werden
sudo dnf install epel-release -y
sudo dnf install certbot -y
2. Nginx stoppen
Nginx muss temporär gestoppt werden, da Certbot im --standalone
Modus kurzzeitig einen eigenen Webserver auf Port 80 startet.
docker stop docker_nginx
3. Zertifikat erstellen
Certbot starten und dem Assistenen folgen.
sudo certbot certonly --standalone -d example.com
4. Zertifikat Pfad anpassen
In der docker-compose.yml
muss der Pfad zu den erstellten SSL Zertifikaten angepasst werden.
services:
nginx:
…
volumes:
- '/etc/letsencrypt/live/<example.com>/fullchain.pem:/etc/nginx/server.pem'
- '/etc/letsencrypt/live/<example.com>/privkey.pem:/etc/nginx/server.key'
Wichtig: Wenn Nginx mit den Volumes (Pfad zu den Zertifikaten) in der docker-compose.yml gestartet wurde und die Zertifikate nicht vorhanden sind, erstellt Docker Ordner anstelle der Dateien. Diese Ordner müssen gelöscht werden, damit die Zertifikate beim Start von Docker erstellt werden können.
5. Docker Container starten
Sind die Zertifikate erfolgreich erstellt können alle Container gestartet und geprüft werden
docker compose up --detach
docker ps
6. Pre- und Post-Hooks
Für die Erneuerung können im Certbot Pre- und Post-Hooks konfiguriert werden, die den nginx-Container stoppen und danach wieder starten. Die Hooks werden nur ausgeführt, wenn Certbot beim Renwal-Aufruf feststellt, dass die Zertifikate tatsächlich ausgetauscht werden müssen. Certbot ist üblicherweise so konfiguriert, dass es zweimal am Tag läuft und prüft, ob ein Austausch notwendig ist. Die Zertifikate sind 90 Tage lang gültig.
Je nach Hostsystem sollte Certbot bereits automatisch eine Erneuerung einrichten (z.B. als systemd Service + Timer). Der Aufruf dort kann dann entsprechend um diese Hooks erweitert werden, z.B.
ExecStart=/usr/bin/certbot [--dry-run] -q renew --pre-hook "…" --post-hook "…"
Pre- und Post-Hook wären dann entsprechend:
--pre-hook "/usr/bin/docker compose -f /opt/relution/docker-compose.yml down nginx"
--post-hook "/usr/bin/docker compose -f /opt/relution/docker-compose.yml up --detach nginx"
Die Hooks können auch auf Skriptdateien verweisen, die den eigentlichen Aufruf enthalten, was in der Regel übersichtlicher ist.
Wichtig: Beim ersten Ausprobieren sollte immer
--dry-run
verwendet werden, damit Let’s Encrypt nicht durch zu viele Fehlversuche für mehrere Tage blockiert wird. Im produktiven Betrieb muss das natürlich weg, sonst gibt es kein Zertifikat.