Heute ist es wieder einmal passiert. Mein Mailclient kann keine Mails abrufen weil das Zertifikat der Mailcow abgelaufen ist. Blöd ist, dass man in diesem Moment auch nicht mehr auf das Webfrontend kommt weil, wegen HSTS Strict Transport Security mein Browser den Kontakt verweigert.
Das Problem hängt mit dem Container „mailcowdockerized-acme-mailcow-1“ zusammen, der sich um die Let’s Encrypt Verifizierung und das Erneuern der Zertifikate kümmert.
Ein Blick in die Logs mit „docker compose logs –tail=200 -f acme-mailcow“ zeigt mir wo das Problem liegt:
Using existing domain rsa key /var/lib/acme/acme/key.pem
Using existing Lets Encrypt account key /var/lib/acme/acme/account.pem
Detecting IP addresses...
OK: XX.35.XXX.250, 0000:0000:0000:0000:0000:0000:0000:0000
Found AAAA record for mail.schmueller.de: 2001:XXXX:af0a:XXXX:4a5d:35ff:fe40:a963 - skipping A record check
Cannot match your IP 0000:0000:0000:0000:0000:0000:0000:0000 against hostname mail.schmueller.de (DNS returned 2001:XXXX:af0a:XXXX:4a5d:35ff:fe40:a963)
Cannot validate any hostnames, skipping Let's Encrypt for 1 hour.
Use SKIP_LETS_ENCRYPT=y in mailcow.conf to skip it permanently.
Die eigene IPv6 wird nicht erkannt und mit 0000:0000:0000:0000:0000:0000:0000:0000 angenommen. Das führt dazu, dass die erkannte IPv6 nicht zur IPv6 aus dem AAAA Record im DNS passt.
Leider bevorzugt das Skript die IPv6 und ignoriert die IPv4, die richtig erkannt wurde und auch zum A Record im DNS passt.
Die Lösung habe ich hier gefunden.
Ich muss sicherstellen, dass die Verifikation auf Basis des A Records geschieht. Dazu muss ich eine Zeile im entsprechenden Skript auskommentieren:
docker exec -it mailcowdockerized-acme-mailcow-1 bash
Suche in der Datei /srv/functions.sh nach der Zeile: AAAA_DOMAIN=$(dig AAAA ${DOMAIN} +short | tail -n 1)
und kommentiere diese aus indem Du ein # davor setzt.
Jetzt noch den Container neu starten und die Zertifikatserneuerung sollte gelingen.
docker restart mailcowdockerized-acme-mailcow-1