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.