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:

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:

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.