Springe zum Inhalt

Let’s Encrypt Zertifikate für Dovecot und Postfix

Primär ist der Einsatz der kostenlosen Let's Encrypt Zertifikate für Webseiten vorgesehen. Wie erzeugt man nun aber ein Zertifikat für einen Mail- bzw. IMAP-Server, auf dem vielleicht gar kein Webserver läuft? Auch das ist in wenigen Schritten möglich. Ich verwende hier certbot zur Kommunikation mit Let's Encrypt, da er für Debian in den Jessie-Backports enthalten ist.

In der Beschreibung hier verwende ich <Domain-Name> für alle Stellen, an der die Domain des eigenen Mailservers eingetragen werden muss.

certbot installieren

Zuerst einmal muss das Jessie-Backport-Repository für die Paketverwaltung bekannt gemacht werden. Dazu legt man am einfachsten unter /etc/apt/sources.list.d eine neue Datei mit dem Namen jessi-backports.list und folgendem Inhalt an:

Danach muss die lokale Kopie des Repository-Verzeichnisses aktualisiert werden und anschließend kann certbot wie gewohnt installiert werden:

Zertifikat anfordern

Danach ist es ganz einfach, ein Zertifikat für den Mailserver anzufordern:

Mit diesem Kommando wird ein temporärer Webserver gestartet über welchen Let's Encrypt mit dem lokalen System kommuniziert. Dadurch wird sichergestellt, dass die zu registrierende Domain auch unter der entsprechenden Adresse erreichbar und damit für den Domainnamen im Zertifikat berechtigt ist.

Nach der erfolgreichen Generierung der Zertifikate werden diese unter /etc/letsencrypt/live/<Domain-Name>/ abgelegt.

Zertifikat in Dovecot einbinden

Unter /etc/dovecot/conf.d/10-ssl.conf trägt man die Pfade zum neuen Zertifikat ein:

Nach einem Neustart von Dovecot ist nun der IMAPS-Zugang mit dem neuen Let's Encrypt Zertifikat gesichert. Leider bietet z.B. Thunderbird keine Möglichkeit, ein gültiges Zertifikat zum Mailserver anzuzeigen (nur bei einem ungültigen Zertifikat kann es angezeigt werden). Mit Hilfe von openssl läßt sich jedoch einfach überprüfen, ob Dovecot das korrekte Zertifikat liefert (hier für meinen eigenen Mailserver mail.tausys.de):

Oben sieht man die Zertifikatskette und unten die erfolgreiche Verifizierung des Zertifikats.

Zertifikat in Postfix einbinden

Zwar ist es für SMTP nicht erforderlich, dass die Zertifikate gültig sind (viele SMTP-Server laufen mit selbst signierten Zertifikaten), da eine Überprüfung nicht vorgeschrieben ist. Warum jedoch sollte man das Let's Encrypt Zertifikat nicht verwenden, wenn man schon ein gültiges vorliegen hat? Große Anbieter benutzen selbst bei Mailservern ein von einer CA signiertes Zertifikat.

Das Zertifikat wird für Postfix in /etc/postfix/main.cf eingetragen:

Nach einem Neustart von Postfix kann man die korrekte Verwendung des Zertifikats in Postfix wiederrum mit openssl überprüfen. Da hier zuerst von einer ungesicherten Verbindung (SMTP über Port 25) mit STARTTLS auf eine gesicherte Verbindung umgeschaltet werden muss, müssen die Parameter für openssl entsprechend angepasst werden:

Zertifikate automatisch erneuern

Edit: Bei der Installation von certbot aus den Debian-Repositories wird automatisch ein Cron-Job unter /etc/cron.d/certbot angelegt. Dieser kann mit nachfolgenden Informationen entsprechend angepasst werden.

Mit Cron kann certbot periodisch aufgerufen werden und erneuert die demnächst ablaufenden Zertifikate automatisch. Ebenfalls bietet certbot die Möglichkeit bei erneuerten Zertifikaten ein Kommando auszuführen, damit z.B. die Mailservices (hier Dovecot und Postfix) zum Einlesen der neuen Zertifikate neu gestartet werden. Dazu legt man sich als erstes ein Skript z.B. unter /usr/local/sbin/restart_mailservices mit folgendem Inhalt an:

Das Skript muss nun noch ausführbar gemacht werden:

Anschließend kann ein Cron-Job erstellt werden, welcher das folgende Kommando periodisch aufruft:

Update: neuere Versionen von certbot sollten deploy-hook statt post-hook verwenden (Danke an Andi).

9 Gedanken zu „Let’s Encrypt Zertifikate für Dovecot und Postfix

  1. Mathias

    Hallo,
    Danke für die schöne Anleitung. Hat super funktioniert.

    Ein paar Anmerkungen:
    Für ubuntu Nutzer gibt es ein ppa: https://launchpad.net/~certbot/+archive/ubuntu/certbot

    Für den Posthook gibt es mittlerweile ein dediziertes Verzeichnis:
    /etc/letsencrypt/post-hook.d/
    Das Verzeichnis wir mit dem automatisch kreierten cron Befehl automatisch eingebunden.

    das t von startls fehlt übrigens immer noch ;-)

  2. Peter Münstermann

    Danke für die tolle Anleitung!!

    bei SuSE Leap (und möglicherweise auch schon früher) spuckt einem bei der Installation der Zertifikate für dovecot noch der AppArmor-Dienst in die Suppe:
    "Can't open file /etc/letsencrypt/live//fullchain.pem: Permission denied"

    Man kann entweder AppArmor deaktivieren, oder den folgende Zeile in den Dateien /etc/apparmor.d/abstractions/ssl_certs und /etc/apparmor.d/abstractions/ssl_keys ergänzen:
    "/etc/letsencrypt/** r,"

  3. Flo

    Vielen Dank für die Anleitung!

    Bei meinem Dovecot Server funktioniert alles bestens. Beim Testen der PostFix-Einbindung (Debian 4.8.4-1 (Jessie), Postfix 2.11.3, openssl 1.0.1t) bekomme ich einen Fehler:

    CONNECTED(00000003)
    140121485764240:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:782:
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 282 bytes and written 324 bytes
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1509817994
    Timeout : 300 (sec)
    Verify return code: 0 (ok)
    ---

    Es scheit allerdings trotzdem alles zu funktionieren, vermutlich wegen dem ja schon von Dir bemerkten Umstand dass es eh' kein verifiziertes Zertifikat für SMTP braucht...
    Ich wäre natürlich trotzdem dankbar wenn das richtige Zertifikat verwendet würde und alles so funktionieren würde wie gedacht.
    Hast Du eine Idee warum es bei mir nicht geht?

    Viele Grüße

    Flo

    1. Flo

      ... Hat sich erledigt - war ein Wurstfingerproblem meinerseits: Tippfehler in der main.cf.
      Du kannst also meinen Beitrag gestrost löschen... Sorry.

    1. Jens Tautenhahn

      In den von mir verwendeten Jessie-Backports ist leider nur die certbot Version 0.10.2 enthalten. Diese kannte deploy-hook noch nicht. Ich habe den Artikel entsprechend angepasst. Danke!

Schreibe einen Kommentar

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