Ich habe mein bisheriges Script zur Zertifikatsübernahme für b1gMailServer grundlegend überarbeitet und vollständig auf Python umgestellt.
Die wichtigste Änderung: Die Hostnamen für IMAP, POP3 und SMTP werden jetzt direkt aus den Einstellungen des BMS-Plugins in der Datenbank gelesen. Daraus erstellt beziehungsweise erneuert Certbot ein gemeinsames Zertifikat für die konfigurierten Mailserver-Adressen.
Damit entfällt die bisherige Abhängigkeit von z.B. LiveConfig und den Zertifikatspfaden in der Apache- oder nginx-Konfiguration. Für die Ausstellung wird Certbots Webroot-Verfahren verwendet. Der bestehende Webserver bleibt dabei aktiv und liefert lediglich die Prüfdateien aus.
Zusätzlich habe ich einige Punkte verbessert:
- Prüfung von Zertifikat, Private Key, Hostnamen, Gültigkeit und Zertifikatskette vor der Übernahme
- Aktualisierung und Dienstneustart nur bei tatsächlich geändertem TLS-Material
- Sicherung der bisherigen Zertifikate und Rollback bei Austausch- oder Startfehlern
- Logs und Backups in eigenen Unterordnern
- Python-Installer mit optionaler Einrichtung des täglichen Cronjobs
- Vorschau- und ACME-Testmodus für die Einrichtung
Wichtig für die HTTP-Validierung: Alle im BMS-Plugin hinterlegten Mailserver-Hostnamen müssen über Port 80 die Dateien unter "/.well-known/acme-challenge/" aus dem konfigurierten Webroot ausliefern können. Die Erreichbarkeit der Webmail-Adresse allein reicht dafür nicht aus.
Quellcode, Anleitung und Konfigurationsbeispiele findet ihr hier:
https://git.onesystems.ch/b1gMail/b1gMailServer-TLS-Manager
Rückmeldungen und Erfahrungen mit anderen Installationen sind willkommen.