Ich werde hier nicht weiter auf das grundsätzliche Setup von Postfix, Let’s Encrypt oder einen Webserver eingehen. Ich setze einfach voraus, dass ihr eine funktionierende Konfiguration habt.
Seit der Postfix-Version 3.4 ist es endlich möglich, mit nur einer IP-Adresse, für jede Domain ein eigenes Zertifikat auszuliefern.
Zuerst legen wir in /etc/postfix/main.cf die Zertifikate und Key-file für die Default-Domain (bei mir mail.cyber-anlage.de) fest. Dafür wird bei Postfix 3.4 das neue smtpd_tls_chain_files benutzt. Mehr dazu hier: http://www.postfix.org/TLS_README.html#server_cert_key
# Postfix ≥ 3.4. Preferred configuration interface. Each file
# starts with the private key, followed by the corresponding
# certificate, and any intermediate issuer certificates. The root CA
# cert may also be needed when published as a DANE trust anchor.
smtpd_tls_chain_files =
/etc/ssl/LE/mail.cyber-anlage.de.key
/etc/ssl/LE/mail.cyber-anlage.de_fullchain.pem
Mit tls_server_sni_maps haben wir jetzt die Möglichkeit eine Tabelle mit Server-Namen, welche via SNI erreichbar sind, und den entsprechenden Schlüssel und Zertifikatsketten zu erstellen. Dafür müssen wir wieder /etc/postfix/main.cf bearbeiten. Mehr dazu hier: http://www.postfix.org/postconf.5.html#tls_server_sni_maps
Die Syntax ist: tls_server_sni_maps = map_type:/Datei/pfad/sni
# Indexed table macro:
# postconf -m shows all available map types
# The indexed SNI table must be created with "postmap -F"
tls_server_sni_maps = hash:/etc/postfix/sni
Nun können wir die Domain, Zertifikate und keyfiles für SNI konfigurieren. Wichtig ist, dass wird hier auch noch mal unsere Default-Domain angeben. Da das Zertifikat in der /etc/postfix/main.cf nur benutzt wird, wenn der kein SNI schickt.
Dafür bearbeiten wir /etc/postfix/sni
Die Syntax lautet: domain private-key Zertifikat rootCA
mail.cyber-anlage.de /etc/ssl/LE/mail.cyber-anlage.de.key /etc/ssl/LE/mail.cyber-anlage.de_fullchain.pem
mail.technikfreak.net /etc/ssl/LE/mail.technikfreak.net.key /etc/ssl/LE/mail.technikfreak.net_fullchain.pem
Jetzt müssen wir mit postmap nur noch die SNI-Tabelle generieren
Die Syntax ist: postmap -F map_type:/Datei/pfad/sni
postmap -F hash:/etc/postfix/sni
Alles was wir jetzt machen müssen, ist postfix neu starten und voilà wir bekommen für jede Domain das entsprechende Zertifikat.
Ich habe meinen Mailserver nach dieser Anleitung eingerichtet, alles lief problemlos bis zur ersten Erneuerung der Zertifikate. Es stellte sich heraus, dass es nicht genügte, postfix neu zu starten, sondern auch das Kommando postmap -F hash:/etc/postfix/sni musste wiederholt werden. Erst dann lieferte Postfix das neue Zertifikat aus. Der Hinweis sollte vielleicht in den Text aufgenommen werden.