bg-tutorials

So installieren Sie ein SSL-Zertifikat auf Qmail

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:

Ö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

Woher liest Qmail das SSL-Zertifikat?

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.

In welcher Reihenfolge lege ich die Dateien in servercert.pem ab?

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/.

Unterstützt Standard-Qmail TLS?

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.

Wird Qmail noch gepflegt?

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.

Warum startet qmail-smtpd, bietet aber kein STARTTLS an?

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.

Wie überprüfe ich das Zertifikat nach dem Neustart von Qmail?

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

A detailed image of a dragon in flight
Geschrieben von

Erfahrener Content-Autor, spezialisiert auf SSL-Zertifikate. Verwandeln Sie komplexe Cybersicherheitsthemen in klare, ansprechende Inhalte. Tragen Sie durch wirkungsvolle Narrative zur Verbesserung der digitalen Sicherheit bei.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.