Inhaltsverzeichnis
Apache Konfiguration für Let's Encrypt Zertifikats-Erneuerung mit Podman
Um Let's Encrypt Zertifikate in einem Container zu erneuern, ist eine spezifische Konfiguration des Apache Virtual Hosts erforderlich, da die Zertifikatserneuerung über einen Container erfolgt. Die folgende Konfiguration stellt sicher, dass Anfragen an die /.well-known/acme-challenge-Ressourcen erfolgreich verarbeitet werden, selbst wenn der eigentliche DocumentRoot für die Webseite anders gesetzt ist.
Apache VHost Konfiguration
In der Apache-Konfigurationsdatei des Virtual Hosts wird der DocumentRoot auf das Verzeichnis der Webseite gesetzt. Da Let's Encrypt jedoch auf /.well-known/acme-challenge zugreift, um die Zertifikate zu validieren, ist eine Alias-Direktive erforderlich, um Anfragen korrekt umzuleiten. Der relevante Ausschnitt der Konfiguration:
.... <VirtualHost *:80> DocumentRoot /var/www/html/redatek Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/ ... </VirtualHost>
Erklärung:
- DocumentRoot legt das Verzeichnis fest, das die Hauptinhalte der Webseite enthält. In diesem Beispiel: `/var/www/html/redatek`.
- Alias definiert eine Umleitung für das Verzeichnis /.well-known/acme-challenge/ auf `/var/www/html/.well-known/acme-challenge/`. Dadurch können Let's Encrypt Validierungsanfragen unabhängig vom DocumentRoot beantwortet werden.
Beachten im Containerbetrieb
Apache Config für http (80) anpassen:
<If "%{THE_REQUEST} !~ m# /.well-known/?#i">
RedirectPermanent / https://url.tld/
</If>
Zumindest Apache > 2.4
Zertifikat generieren
den Webroot Ordner angeben –> certbot certonly –webroot /var/www/ -d domain.tld
Let's Encrypt Zertifikats-Erneuerung im Container
Da die Zertifikatserneuerung über Podman in einem Container stattfindet, wird das Verzeichnis für die Webseiten-Validierung gemountet. Dies erfolgt mittels Volumemapping, um sicherzustellen, dass Let's Encrypt auf die notwendigen Verzeichnisse zugreifen kann.
Der Befehl für die Zertifikats-Erneuerung im Container sieht wie folgt aus:
podman run --rm -it -v "/container/letsencrypt/log:/var/log/letsencrypt" -v "/var/www/html:/var/www/" -v "/container/letsencrypt/cert:/etc/letsencrypt" docker.io/certbot/certbot renew
Erklärung:
- –rm löscht den Container nach der Ausführung, um Speicherplatz freizugeben.
- -it ermöglicht eine interaktive Ausführung im Terminal.
- -v „/container/letsencrypt/log:/var/log/letsencrypt“ legt das Log-Verzeichnis fest, um Protokolle der Zertifikats-Erneuerung zu speichern.
- -v „/var/www/html:/var/www/„ mappt das lokale Webverzeichnis `/var/www/html` in das Verzeichnis `/var/www/` innerhalb des Containers.
- -v “/container/letsencrypt/cert:/etc/letsencrypt“ weist das Verzeichnis für die Zertifikate zu.
Neustart nicht vergessen
nach dem
podman run --rm -it -v "/container/letsencrypt/log:/var/log/letsencrypt" -v "/var/www/html:/var/www/" -v "/container/letsencrypt/cert:/etc/letsencrypt" docker.io/certbot/certbot renew -v
unbedingt die betreffenden Dienste neu starten damit der neue Key aktiv geladen wird.
systemctl restart httpd podman container restart mailserver
Problematik ohne Alias-Direktive
Ohne das Alias-Mapping schlägt der Erneuerungsprozess fehl, da Let's Encrypt auf /.well-known/acme-challenge zugreifen muss. Der angegebene DocumentRoot für die Webseite (/var/www/html/redatek) enthält jedoch dieses Verzeichnis nicht direkt. Daher ist das Alias in der Apache-Konfiguration notwendig, um die Validierung erfolgreich abzuschließen.
Zusammenfassung
Diese Konfiguration ermöglicht es, Let's Encrypt Zertifikate über einen Podman-Container zu erneuern, indem die Apache-Konfiguration angepasst wird, um die notwendigen Ressourcen bereitzustellen.
- DocumentRoot verweist auf den Hauptinhalt der Webseite.
- Alias stellt sicher, dass die Zertifikatsanfragen von Let's Encrypt korrekt beantwortet werden.
- Podman Container-Setup mit Volumemapping ermöglicht den Zugriff auf die Verzeichnisse für Logs und Zertifikate sowie auf das Webverzeichnis für die Validierung.
