Seit Version 17.0 unterstützt der MDaemon Messaging Server die automatische Einbindung von Let’s Encrypt-Zertifikaten. Im Rahmen eines Kundenprojekts hatte ich nun Gelegenheit, dieses zu Nutzen.
Voraussetzungen
Damit Let’s Encrypt genutzt werden kann, müssen die Ports 80/tcp (http) und 443/tcp (https) in der Firewall am Internetzugang als auch in der Windows-Firewall des Systems, auf dem der MDaemon installiert ist, freigegeben sein.
Ferner muss eine Domäne im öffentlichen DNS registriert sein, die auf die IP-Adresse des Internetanschlusses verweist. Hat man keine feste öffentliche IP-Adresse können DDNS-Dienste verwendet werden. In diesem Fall wird spDYN (vormals SPDNS) verwendet.
Im MDaemon Messaging Server muss, ausgehend von der Voreinstellung, nichts angepasst werden. Auf Windows-Seite muss je nach Version und Ausgabe ggf. noch die PowerShell (min. Version 3.0) aktualisiert, die PowerShell-Ausführungsrichtlinie angepasst und ACMEsharp installiert werden. Siehe dazu
Let’s Encrypt Community – Windows 7 & MDaemon: error installing the certificate
Wichtig ist, das der SMTP-Hostname der Standard-Domäne (i.d.R. die erste Domäne) unter “Einstellungen – Domänen-Manager – <Domäne> – Hostname & IP – SMTP-Hostname” der öffentliche Domäne, also hier der spDYN-Domäne, entspricht. Andernfalls bricht das Ausstellen des Zertifikats ab. Die Mail-Domäne ansich kann einen anderen Namen haben.
Zertifikat ausstellen
Sind die Voraussetzungen erfüllt, kann durch folgenden Befehl das Zertifikat ausgestellt werden:
powershell LW:\MDaemon\LetsEncrypt\LetsEncrypt.ps1
Dabei handelt es sich um die minimalste Angabe. Unter Umständen muss ein “-ExecutionPolicy Bypass” nach “powershell” eingefügt werden. Man kann zusätzlich noch alternative Domänen, sofern verwendet den IIS-SiteName und die Postmaster-Mail-Adresse angeben:
LetsEncrypt.ps1 -AlternateHostNames mail.domain.tld,wc.domain.tld -IISSiteName MeineSite -To "admin@domain.tld"
Z.B. kann mittels “AlternateHostNames” noch die Subdomain für Autodiscover (“autodiscover.domain.tld”) mit abgedeckt werden.
Lässt man “-to admin@domain.tld” weg, wird automatisch “postmaster@<SMTP-Hostname>” verwendet. In diesem Fall wäre das also die spDYN-Domäne: “postmaster@subdomain.spdns.de”.
Hinweis: Die TLD “.local” kann sowohl als primäre als auch alternative Domäne nicht verwendet werden!
Das PowerShell-Skript führt die notwendige Schritte aus das Zertifikat zu bekommen, ändert die relevanten *.ini-Dateien des MDaemon ab (MDaemon.ini, WordClient.ini, WebAdmin.ini) und startet den MDaemon neu. Von daher sollte beachtet werden, wann man das Zertifikat ausstellt bzw. dieses erneuert wird, damit im laufenden Betrieb nicht (wenn auch nur kurz) die Verbindungen unterbrochen werden.
Zertifikat erneuern
Die Zertifikate von Let’s Encrypt laufen alle 90 Tage ab, daher sollte man diese automatisch verlängern bzw. neu ausstellen lassen. Dazu muss lediglich der oben genannte Befehl erneut ausgeführt werden. In Form eines kleines Batch-Skriptes und der Windows-eigenen Aufgabenplannung kann das z.B. so aussehen:
@echo off powershell LW:\MDaemon\LetsEncrypt\LetsEncrypt.ps1 -To "admin@domain.tld"
Soweit ich weiß kann frühstens nach 60 Tagen erneuert werden. Zu oft sollte man nicht versuchen, das Zertifikat neu ausstellen zu lassen, da es sonst zu einer Sperre (Duplicate Certificate, etc.) kommen kann.
Protokollierung (Logging)
Unter “LW:\MDaemon\Logs” erstellt das PowerShell-Skript eine Datei mit dem Namen “LetsEncrypt.log”.
Die Meldungen sowohl bei der Ausgabe des Skripts als auch im Log sind gut verständlich. So lässt sich im Problemfall relativ leicht rauslesen, woran es hakt.
Wie geht es weiter mit Port 80/tcp (http)?
Zumindest für das erste Ausstellen wird Port 80/tcp (http) benötigt. Wie es dann beim Renewal aussieht, kann ich aktuell noch nicht sagen. Beim Kunden wurde nach dem Ausstellen des Zertifikats die Umleitung von “HTTP mit Umleitung nach HTTPS” unter “Einstellungen – Web- & IM-Dienste…” konfiguriert, da man denn WorldClient nicht unverschlüsselt stehen lassen wollte.
Ich werde dann in 90 Tagen berichten und diesen Beitrag aktualisieren.
Weitere Links und Quellen:
Update 18.02.2018
Wie versprochen ein kleines Update: Die Aufgabe funktioniert, das Zertifikat wurde automatisch erneuert und eingebunden. Im Log kann man den Vorgang gut nachvollziehen, in Windows in der Zertifikate-MMC sieht man die bisherigen und das neue Zertifikat und natürlich mittels Browser gibt es keine Warnung und man sieht am Ablaufdatum, das alles ok ist.
Update 22.08.2018
Ohne Skript und rein Grafisch kann man Let’s Encrypt im MDaemon Messaging Server unter
Sicherheit - Sicherheitseinstellungen - SSL & TLS - Let's Encrypt
konfigurieren und automatisch verlängern lassen.
Update 12.10.2018
Gibt man Port 80/tcp für http frei und es klappt dennoch nicht mit Let’s encrypt, kann dies daran liegen, das der MDaemon auf Port 3000/tcp für http lauscht. Dies entspricht der Voreinstellung. Nun hat man zwei Möglichkeiten:
Entweder den Port im MDaemon unter
Einstellungen - Web- & IM-Dienste - Webmail - Webserver - Überwachter Port - Webmail-Server überwacht folgenden TCP-Port: 3000
ändern oder bei der Port-Weiterleitung im Firewall-Router von extern 80/tcp auf intern 3000/tcp übersetzen. Nicht vergessen darf man zudem die Windows-Firewall.
Zu beachten ist das der Webserver ab Werk zwar auf http und https antwortet, aber unter Umständen vom Administrator umkonfiguriert wurde, das nur auf https reagiert wird. Überprüfen und ändern lässt sich das unter
Einstellungen - Web- & IM-Dienste - Webmail - SSL & HTTPS - Folgende Arten von Verbindungen zulassen - HTTP und HTTPS
Trotz alle Automatismen kann es passieren, dass das Zertifikat abläuft und/oder nicht verlängert wird bzw. werden kann. Hilfreich ist im Fehlerfall immer ein Blick ins “LetsEncrypt.log”. Bevor es allerdings zu einem Anruf durch den Kunden kommt, kann man die Gültigkeit des Zertifikats mit Monitoringsystemen wie z.B. Server-Eye und dem dortigen Sensor “SSL Zertifikat Status” im Auge behalten.
Update 22.10.2018
Es scheint als muss Port 80/tcp (http) dauerhaft geöffnet bleiben, andernfalls klappt’s mit der Zertifikatverlängerung nicht (mehr).
Update 09.04.2019
Laut Zen Software – Blog – Let’s Encrypt, Free SSL Certificates for MDaemon Email Server
sollen die Let’s Encrypt-Aktualisierungen funktionieren, wenn man für Webmail http zu https umleitet:
"Last but not least, redirect the standard HTTP Web traffic on port 80 to the HTTPS port 443. This will still allow Let’s Encrypt updates to work. They will still connect on port 80 but will work via a redirect (it’s not good practice to leave port 80 open publically)."
Somit wäre man schnell und einfach raus aus dem “Port 80 (unverschlüsselt)-Dilemma” raus. Eingestellt wird dies unter
Sicherheit - Sicherheits-Einstellungen - SSL & TLS - Webmail - HTTP mit Umleitung nach HTTPS
Abschließend den Webserver neustarten.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Hallo,
ich habe in MDaemon gerade ein Lets Encrypt Zertifikat eingebunden und dafür temporär den Port 80 von aussen geöffnet und nach dem Ausstellen des Zertifikates wieder geschlossen.
Ist für das Renewal auch nötig, dass Port 80 geöffnet wird oder kann dies komplett über Port 443 dann abgewickelt werden?
Solange das Zertifikat gültig ist, kann Port 80 nachdem ersten Ausstellen und für die Erneuerung geschlossen bleiben. Ist das Zertifikat abgelaufen und soll erneuert werden, muss Port 80 wieder geöffnet werden.
Heute ist ein Zertifikat bei einem meiner Kunden abgelaufen, da Port 80 nach dem ersten Ausstellen wieder geschlossen wurde. Es muss also Port 80 weiterhin offen bleiben (leider)!
Hallo Olli,
hast leider recht. Seltsam ist, das bei dem Kunden bei dem ich das eben überprüft habe, es schonmal ohne Port 80 bei der Verlängerung ging.
Hallo Olli und natürlich auch an alle anderen,
ein Weg aus dem Port 80 (http) Dilemma kann ein vorgeschalteter Reverse Proxy sein, der Port 80 nur für Let’s Encrypt nutzt, aber Webmail usw. nur verschlüsselt weiterleitet. Siehe dazu meinen Beitrag “Debian 9 Stretch: Apache als Reverse Proxy mit Let’s Encrypt einsetzen” (https://www.andysblog.de/debian-9-stretch-apache-als-reverse-proxy-mit-lets-encrypt-einsetzen). Im MDaemon selbst belässt man dann einfach das self-signed Zertifikat.
Hallo Olli und allen anderen,
laut dem Blog von Zen Software sollen die Let’s Encrypt-Aktualisierungen ebenfalls möglich sein, wenn man in MDaemon für Webmail die Umleitung von HTTP zu HTTPS aktiviert. Port 80 muss zwar dennoch offen sein, aber wenigstens landet man dann nicht mehr auf der unverschlüsselten Webmail-Seite. Der Beitrag wurde entsprechend aktualisiert. Bei unseren Kunden, ohne Reverse Proxy, haben wir dies aktiviert. Es fehlt noch der Langzeit-Erfahrungswert, aber aktuell sieht’s gut aus.
Hallo Andy,
ich habe es probiert, jedoch ohne erfolg, insofern wird sich mein Kunde nun ein offizielles Zertifikat kaufen.
Grüße und trotzdem danke!
Olli