Postfix und Dovecot mit StartSSL-Zertifikaten

StartSSL stellt eine günstige Möglichkeit bereit, wie man unkompliziert an SSL-Zertifikate kommt.

Allerdings haben die Zertifkate den Nachteil, dass sie ein Chain-Zertifikat benötigen. Sonst bekommen Nutzer trotz eines eigenlich gültigen Zertifikats Warnmeldungen angezeigt.

Weder Dovecot noch Postfix haben für die Chain-Zertifikate eine Konfigurationsoption. Es geht aber trotzdem sehr einfach, wie im Folgenden gezeigt wird.

Zunächst muss man herausfinden, welches Chain-Zertifikat man benötigt. Je nachdem, wie viel man in die Überprüfung durch StartSSL investiert hat, erhöht sich der Level. Der Level lässt sich mit folgendem Kommando herausfinden:

openssl x509 -noout -text -in private/server.crt

Ziemlich am Anfang der Ausgabe muss ein Abschnitt names Issuer erscheinen:

...
Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Class 2 Primary Intermediate Server CA
...

Die entsprechende Datei kann man sich hier herunterladen. Für Class 1 ist es sub.class1.server.ca.cem, für Class 2 ist es sub.class2.server.ca.pem. Zusätzlich zu den Chain-Zertifikaten benötigt man auch noch das Root-CA-Zertifikat von StartSSL. Dieses findet man im gleichen Verzeichnis wie die Chain-Zertifkate.

Als nächstes muss man eine Datei erstellen, die sowohl das Zertifikat als auch das Chain-Zertifikat enthält:

cat private/server.crt startssl/sub.class2.server.ca.pem > private/server_with_chain.pem

Für Dovecot muss man nun folgende Anpassungen an der Konfiguration machen:

...
ssl_cert_file = /etc/ssl/private/server_with_chain.crt
ssl_ca_file = /etc/ssl/startssl/ca.pem

Der Pfad für ssl_cert_file muss auf die eben erstellte Datei mit dem Zertifikat und dem Chain-Zertifikat zeigen, ssl_ca_file muss auf die Datei mit dem StartSSL Root-CA-Zertifikat zeigen.

In Postfix ist es ebenso unkompliziert:

...
smtpd_tls_cert_file = /etc/ssl/private/server_with_chain.crt
smtpd_tls_CAfile = /etc/ssl/startssl/ca.pem
...

Hier muss smtpd_tls_cert_file auf die eben erstellte Datei mit dem Zertifikat und dem Chain-Zertifikat zeigen, smtpd_tls_CAfile muss auf die Datei mit dem StartSSL Root-CA-Zertifikat zeigen.

Überprüfen kann man das ganze dann mit folgenden Kommandos:

openssl s_client -connect localhost:imaps
openssl s_client -connect localhost:143 -starttls imap
openssl s_client -connect localhost:25 -starttls smtp

Hat es funktioniert, dann muss die Ausgabe in etwa so ausschauen:

CONNECTED(00000003)
depth=1 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/....
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---

Wichtig ist dabei die Zeile verify return:0

Damit sollten Warnungen bei StartSSL-Zertifikaten der Vergangenheit angehören.

15 Kommentare bei „Postfix und Dovecot mit StartSSL-Zertifikaten

    1. Ich habe auch smtpd_tls_key_file in der Konfiguration angegeben.
      Das ist für den Kontext der CA-Chains aber unerheblich.

  1. hallo. um anderen die das hier per google finden die weitere recherche zu ersparen ein kurzer tipp:

    wenn man beim testen mit openssl folgenden fehler bekommt:

    verify error:num=19:self signed certificate in certificate chain

    und gleichzeitig ein „verify return:0“ dann braucht man sich dadurch nicht verwirren lassen, denn der fehler 19 ist völlig normal. jedes root zertifikat ist nämlich selfsigned! 😉 und man bekommt hier deshalb einen fehler, weil openssl nicht den lokalen certificate-store prüft ob das root cert dort installiert ist. man könnte den fehler abschalten indem man noch ein -CApath dran hängt und seinen cert-store angibt…

    P.S.: mein comodo zertifikat hat sogar eine 3er chain – je billiger das zertifikat desto länger die chain :DD

  2. Thank you so much 🙂

    This has really helped me, the dovecot steps I couldnt find anywhere else. Also knowing how to use the „openssl“ commands was really usefull.

    Once again cant thank you enough, this has reeeeally helped me 🙂

  3. Hallo,
    ich versuche mich gerade daran die Zertifikate richtig anzugeben. Funktioniert aber leider nicht. Was ich sehr verwirrend finde ist, das oben erzeugte Datei: server_with_chain.pem danach nirgends angegeben wird. Überall ist es dann mit .crt. Was ist nun richtig, woher bekomme ich die server_with_chain.crt?
    Alles in allem gelingt es mir einfach nicht. Ich bekomme immer die Fehlermeldung:

    can’t connect: Certificate failure for XXXX.de: Server name does not match certificate: /CN=localhost.localdomain

    Könnten Sie mich aufklären wo nun welche Datei genau an gegeben werden muss?

    1. Die Zeile

      cat private/server.crt startssl/sub.class2.server.ca.pem > private/server_with_chain.pem

      ist tatsächlich ein Fehler.

      Die Datei server_with_chain.pem muss eigentlich server_with_chain.crt heißen.

  4. Evtl eine blöde Frage:
    In welche Config-Files müssen diese Einstellungen eingetragen werden? Postfix ist mir klar, aber Dovecot wüsste ich jetzt nicht, wo ich die Einstellungen machen muss

    1. Das ist abhängig von der Dovecot-Version und der Distribution, die Du verwendest.

      Die allgemeine Dovecot-Doku im Wiki sollte Dir da weiterhelfen.

Schreibe einen Kommentar

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