MDaemon und Let’s Encrypt

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

MDaemon Online Hilfe – Erstellen und Verwenden von SSL-Zertifikaten – Using Let’s Encrypt to Manage Your Certificate

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:

Alt-N Discussion Groups > MDaemon Discussion Groups > MDaemon Support > Archive > Let’s Encrypt Renewal

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.

7 Kommentare

  1. Torsten

    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?

  2. andy

    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.

  3. Olli

    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)!

  4. andy

    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.

  5. andy

    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.

  6. andy

    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.

  7. Olli

    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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑