Dieses Tutorial zeigt Ihnen, wie Sie ein SSL/TLS-Zertifikat auf Qmail installieren, dem Mail Transfer Agent, der ursprünglich von D. J. Bernstein geschrieben wurde. Der Vorgang ist derselbe, den Qmail seit Jahren verwendet: Erstellen Sie eine einzige PEM-Datei, die den privaten Schlüssel, Ihr Serverzertifikat und die Zwischenzertifikatskette enthält, legen Sie sie unter /var/qmail/control/servercert.pem ab und starten Sie Qmail neu.
Bevor Sie beginnen: Qmail ist ein veralteter MTA
Qmail selbst wurde seit der ursprünglichen Veröffentlichung von qmail-1.03 im Jahr 1998 nicht mehr aktualisiert. D. J. Bernstein stellte den Code 2007 in die Public Domain, nahm die Entwicklung jedoch nicht wieder auf. Der bekannte Community-Fork netqmail erreichte 2007 seine finale Version 1.06 und wird seit über einem Jahrzehnt nicht mehr gepflegt. Der aktive moderne Nachfolger ist notqmail (aktuelle Version 1.09, Mai 2024), der Fehlerbehebungen und Kompatibilität mit modernen Systemen weiterführt und dabei vollständig kompatibel mit dem Original bleibt.
Ebenso wichtig für diese Anleitung: Standard-Qmail hat keine native SSL/TLS-Unterstützung. TLS wird auf einem von zwei Wegen von Drittanbietern hinzugefügt:
- Der qmail-tls-Patch von Frederik Vermeulen, der STARTTLS zu qmail-smtpd hinzufügt und das Zertifikat aus einem fest codierten Pfad liest: /var/qmail/control/servercert.pem. Die meisten modernen Qmail-Pakete (einschließlich netqmail- und notqmail-Builds, der s/qmail-Distribution und vieler Anbieterpakete) liefern diesen Patch oder einen gleichwertigen Ersatz mit.
- stunnel vor qmail-smtpd, um die Verbindung auf Port 465 (SMTPS) in TLS zu verpacken. Dies funktioniert mit jedem Qmail-Build, da die TLS-Terminierung außerhalb von Qmail stattfindet.
Wenn Sie eine bestehende Qmail-Bereitstellung pflegen, gelten die folgenden Schritte weiterhin. Wenn Sie einen neuen Mailserver von Grund auf einrichten, sollten Sie stattdessen Postfix oder OpenSMTPD in Betracht ziehen: Beide verfügen über native, gut gepflegte TLS-Unterstützung und aktive Sicherheitsteams. Wir haben ein separates Tutorial dazu, wie man ein SSL-Zertifikat auf Postfix installiert.
CSR-Code für Qmail erstellen
Wenn Sie Ihren CSR bereits erstellt und die SSL-Dateien von Ihrer CA erhalten haben, springen Sie direkt zu Installation des SSL-Zertifikats auf Qmail.
CSR steht für Certificate Signing Request: einen Block codierten Textes, der Ihre Domain- und Organisationsdaten enthält. Sie reichen ihn bei der Zertifizierungsstelle (CA) ein, damit diese Ihre Anfrage validieren und das Zertifikat ausstellen kann. Beim Erstellen des CSR wird auch der zugehörige private Schlüssel erzeugt, der auf Ihrem Server verbleibt und für die Installation erforderlich ist. Sie haben zwei Möglichkeiten:
- Verwenden Sie unseren CSR-Generator, um den CSR automatisch zu erstellen.
- Folgen Sie unserer Schritt-für-Schritt-Anleitung zum Erstellen eines CSR für Qmail.
Öffnen Sie die CSR-Datei in einem beliebigen Texteditor und kopieren Sie den gesamten Block, einschließlich der Zeilen BEGIN CERTIFICATE REQUEST und END CERTIFICATE REQUEST, in das CSR-Feld Ihres Bestellformulars. Bewahren Sie die Datei mit dem privaten Schlüssel sicher auf: Sie werden ihn im nächsten Abschnitt in die PEM-Datei einfügen.
Installieren Sie das SSL-Zertifikat auf Qmail
Nach der Validierung sendet Ihnen die CA per E-Mail ein ZIP-Archiv mit Ihren SSL-Dateien: das primäre (Server-)Zertifikat und ein oder mehrere Zwischenzertifikate (CA). Entpacken Sie das Archiv auf Ihrem Server und folgen Sie dann den nachstehenden Schritten.
Schritt 1: Schlüssel, Zertifikat und Kette in einer PEM-Datei zusammenführen
Der qmail-tls-Patch (und die entsprechenden Varianten in netqmail, notqmail und s/qmail) liest alles, was zur TLS-Terminierung benötigt wird, aus einer einzigen PEM-Datei. Verketten Sie die Dateien in dieser Reihenfolge: zuerst Ihr privater Schlüssel, dann Ihr Serverzertifikat, dann die Zwischenzertifikatskette (CA). Das Root-Zertifikat ist nicht erforderlich (Clients vertrauen ihm bereits). Führen Sie im Verzeichnis mit Ihren extrahierten Dateien Folgendes aus:
cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Wenn Ihre CA die Zwischenzertifikate als separate Dateien statt als eine einzige .ca-bundle-Datei geliefert hat, listen Sie jede einzelne nach dem Serverzertifikat auf, zuerst das Leaf-Zertifikat, zuletzt das Root-ausstellende Zwischenzertifikat:
cat yourdomain.key yourdomain.crt intermediate1.crt intermediate2.crt > servercert.pem
Öffnen Sie die resultierende Datei in einem Texteditor, um die Struktur zu überprüfen. Sie sollte wie folgt aussehen, mit echten Fünf-Bindestrich-Markierungen um jeden Block:
-----BEGIN RSA PRIVATE KEY-----
(der Text Ihres privaten Schlüssels)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(der Text Ihres primären SSL-Zertifikats)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(der Text des Zwischenzertifikats der CA)
-----END CERTIFICATE-----
Neuere Schlüssel können statt BEGIN RSA PRIVATE KEY mit BEGIN PRIVATE KEY beschriftet sein; beides ist in Ordnung. Der Schlüssel darf nicht mit einer Passphrase verschlüsselt sein, da qmail-smtpd ihn beim Start ohne Abfrage lädt. Wenn Ihre CA ein ECDSA-Zertifikat ausgestellt hat, lautet der Schlüsselblock BEGIN EC PRIVATE KEY; ansonsten ändert sich nichts.
Schritt 2: Datei in das Kontrollverzeichnis von Qmail verschieben
Der Dateiname und Pfad sind durch den qmail-tls-Patch fest vorgegeben. Verschieben Sie die zusammengeführte PEM-Datei in das Kontrollverzeichnis von Qmail und schränken Sie deren Berechtigungen ein, da sie Ihren privaten Schlüssel enthält:
sudo mv servercert.pem /var/qmail/control/servercert.pem
sudo chmod 600 /var/qmail/control/servercert.pem
sudo chown root:qmail /var/qmail/control/servercert.pem
Eigentümer und Gruppe hängen davon ab, welcher Benutzer qmail-smtpd auf Ihrem System ausführt. Bei einer Standardinstallation von netqmail oder notqmail ist das normalerweise qmaild oder die Gruppe qmail, sodass root:qmail mit Modus 600 funktioniert. Bei einer auf vpopmail basierenden Einrichtung läuft qmail-smtpd als vpopmail, daher verwenden Sie:
sudo chown vpopmail:vchkpw /var/qmail/control/servercert.pem
sudo chmod 640 /var/qmail/control/servercert.pem
In jedem Fall ist das Ziel dasselbe: Der qmail-smtpd-Prozess muss die Datei lesen können, und sonst niemand.
Schritt 3: Anpassung für benutzerdefinierte Builds
Die meisten Qmail-Varianten suchen am Standardort, aber einige verwenden stattdessen Umgebungsvariablen. Passen Sie es an Ihren Build an:
- Standard-Qmail mit dem qmail-tls-Patch (netqmail / notqmail / Anbieterpakete): Es ist keine weitere Konfiguration erforderlich. qmail-smtpd liest /var/qmail/control/servercert.pem automatisch. Damit qmail-smtpd STARTTLS in der EHLO-Antwort ankündigt, muss die Umgebungsvariable UCSPITLS im qmail-smtpd-Run-Skript gesetzt werden (in der Regel /var/qmail/supervise/qmail-smtpd/run): exportieren Sie UCSPITLS=““ vor der qmail-smtpd-Zeile. Um Verschlüsselung vor der Authentifizierung zu erzwingen, setzen Sie zusätzlich FORCE_TLS=1.
- s/qmail mit ucspi-ssl: Der Zertifikatspfad ist nicht fest codiert. Setzen Sie diese Umgebungsvariablen in Ihrem qmail-smtpd-Run-Skript (oder im entsprechenden tcpserver-/sslserver-Wrapper): CERTFILE für das Serverzertifikat, KEYFILE für den privaten Schlüssel (diese können auf dieselbe zusammengeführte PEM-Datei verweisen) und CERTCHAINFILE für die Zwischenzertifikate. Die genauen Direktivennamen für Ihre Version finden Sie in der s/qmail-Dokumentation.
- stunnel-Frontend (SMTPS auf Port 465): Richten Sie die cert-Direktive von stunnel auf /var/qmail/control/servercert.pem und lassen Sie es qmail-smtpd über exec starten. Dieser Weg benötigt den qmail-tls-Patch überhaupt nicht; TLS wird bei stunnel terminiert.
Wenn Sie nicht wissen, mit welchem Patch Ihr qmail-smtpd erstellt wurde, überprüfen Sie die Binärdatei:
strings /var/qmail/bin/qmail-smtpd | grep -iE 'tls|starttls|servercert'
Wenn Sie Verweise auf STARTTLS, servercert.pem oder UCSPITLS sehen, ist der qmail-tls-Patch in die Binärdatei einkompiliert.
Schritt 4: Qmail neu starten
Qmail liest das Zertifikat beim Prozessstart, daher ist ein Neustart von qmail-smtpd erforderlich. Bei den meisten Installationen, die die mitgelieferten Kontrollskripte verwenden:
sudo qmailctl restart
Wenn Ihre Distribution Qmail stattdessen in einen systemd-Dienst einbindet, verwenden Sie:
sudo systemctl restart qmail
Bei einer daemontools-/runit-Einrichtung senden Sie stattdessen ein TERM-Signal über svc an qmail-smtpd:
sudo svc -t /service/qmail-smtpd
Beobachten Sie das Protokoll (in der Regel /var/log/qmail/smtpd/current) auf Fehler beim Start. Eine falsch formatierte PEM-Datei oder falsche Besitzrechte sind der häufigste Grund, warum qmail-smtpd sich weigert, TLS zu aktivieren.
Testen Sie Ihre SSL-Installation
Überprüfen Sie mit OpenSSL, ob Qmail STARTTLS anbietet und das richtige Zertifikat bereitstellt. Ersetzen Sie mail.yourdomain.com durch den Hostnamen Ihres Mailservers:
openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null
| openssl x509 -noout -issuer -subject -dates
Die Ausgabe sollte den Subjekt (Common Name), den Aussteller (die CA) und die Gültigkeitsdaten Ihres Zertifikats anzeigen. Wenn Sie stattdessen SMTPS über stunnel auf Port 465 eingerichtet haben, lassen Sie -starttls smtp weg und verbinden Sie sich direkt mit Port 465:
openssl s_client -connect mail.yourdomain.com:465 -servername mail.yourdomain.com
Achten Sie am Ende des Handshakes auf Verify return code: 0 (ok). Wenn Sie einen Kettenfehler sehen, fehlen die Zwischenzertifikate in servercert.pem: Fügen Sie sie hinzu und starten Sie qmail-smtpd neu. Für einen vollständigen Bericht über Zertifikat, Kette und Protokollunterstützung führen Sie unseren SSL Checker für Ihren Mail-Hostnamen aus.
Häufig gestellte Fragen
Aus der Datei /var/qmail/control/servercert.pem. Dieser Pfad ist im qmail-tls-Patch fest codiert, der STARTTLS zu qmail-smtpd hinzufügt, und derselbe Pfad wird von jeder gängigen Qmail-Variante (netqmail, notqmail, Anbieterpakete) verwendet. Die Datei muss den privaten Schlüssel, das Serverzertifikat und die Zwischenzertifikatskette in dieser Reihenfolge enthalten. s/qmail mit ucspi-ssl ist die Ausnahme: Es liest stattdessen die Umgebungsvariablen CERTFILE, KEYFILE und CERTCHAINFILE.
Zuerst der private Schlüssel, dann das Server-(Leaf-)Zertifikat, dann das/die Zwischenzertifikat(e) der CA. Das Root-Zertifikat ist nicht erforderlich, da Mail-Clients ihm bereits vertrauen. Eine einzeilige Erstellung genügt:cat yourdomain.key yourdomain.crt yourdomain.ca-bundle > servercert.pem
Wenn die Reihenfolge falsch ist, wird qmail-smtpd das Zertifikat beim Start nicht laden können, und TLS wird nicht angeboten. Überprüfen Sie in diesem Fall das Protokoll unter /var/log/qmail/smtpd/.
Nicht von Haus aus. Die ursprüngliche Version qmail-1.03 aus dem Jahr 1998 hat keine SSL- oder TLS-Unterstützung. TLS wird entweder durch den qmail-tls-Patch (in die qmail-smtpd-Binärdatei einkompiliert, fügt STARTTLS auf den Ports 25 und 587 hinzu) oder durch Ausführen von stunnel vor qmail-smtpd für SMTPS auf Port 465 hinzugefügt. Fast jedes moderne Qmail-Paket wird bereits mit angewendetem qmail-tls-Patch ausgeliefert, sodass Sie den Quellcode in der Regel nicht selbst patchen müssen.
Das ursprüngliche Qmail (qmail-1.03) wurde seit 1998 nicht mehr aktualisiert. Der erste Community-Fork, netqmail, brachte 2007 seine letzte Version (1.06) heraus. Der aktive moderne Nachfolger ist notqmail, der im Mai 2024 die Version 1.09 veröffentlichte und weiterhin Fehlerbehebungen und Kompatibilitätspatches für moderne Systeme liefert. Für neue Mailserver entscheiden sich die meisten Betreiber stattdessen für Postfix oder OpenSMTPD, die beide über native und aktiv gepflegte TLS-Unterstützung verfügen.
Drei häufige Ursachen. Erstens: Die Umgebungsvariable UCSPITLS wird im qmail-smtpd-Run-Skript nicht exportiert: Setzen Sie UCSPITLS=““ (der Wert kann leer sein) vor der qmail-smtpd-Zeile und starten Sie den Dienst neu. Zweitens: Die qmail-smtpd-Binärdatei wurde ohne den qmail-tls-Patch erstellt: Überprüfen Sie dies mit strings /var/qmail/bin/qmail-smtpd | grep -i tls. Drittens: /var/qmail/control/servercert.pem fehlt, ist für den qmail-smtpd-Benutzer nicht lesbar oder fehlerhaft formatiert; überprüfen Sie die Berechtigungen und die Reihenfolge der PEM-Blöcke.
Verbinden Sie sich mit OpenSSL zum SMTP-Port und lesen Sie das Zertifikat, das Qmail über STARTTLS präsentiert:openssl s_client -starttls smtp -connect mail.yourdomain.com:25 -servername mail.yourdomain.com </dev/null | openssl x509 -noout -issuer -subject -dates
Dies zeigt den Subjekt, den Aussteller und die Gültigkeitsdaten an. Für SMTPS über stunnel auf Port 465 lassen Sie die Option -starttls smtp weg. Bestätigen Sie, dass der Aussteller mit Ihrer CA übereinstimmt und der Handshake mit Verify return code: 0 (ok) endet.
Sparen Sie 10% auf SSL-Zertifikate, wenn Sie noch heute bestellen!
Schnelle Ausstellung, starke Verschlüsselung, 99,99% Browser-Vertrauen, engagierter Support und 25-tägige Geld-zurück-Garantie. Gutscheincode: SAVE10


