我不知道如何设置 main.conf postfix 配置文件和 10-ssl.conf dovecot 配置文件,以使我的邮件服务器能够处理多个证书。让我解释一下……我在同一台服务器上有两个域,比如
mail.example.it
mail.example.com
并在不同的文件夹中有两个不同的证书
etc/letsencrypt/live/mail.example.it
etc/letsencrypt/live/mail.example.com
问题是我应该如何在 postfix 配置的 main.conf 上设置 tls 参数?它似乎只支持一个条目
smtpd_tls_cert_file
smtpd_tls_key_file
dovecot 配置的 10-ssl.conf 上也存在同样的问题:似乎只支持一个条目
ssl_cert
ssl_key
非常感谢帮助
答案1
这是通过查看服务器名称指示 (SNI)在 TLS 握手过程中使用 header 来选择正确的证书,然后再交换任何加密数据。目前(如果有变化,我会编辑此答案)
更新:Postfix 3.4.0 中引入了 SNI 支持 -http://www.postfix.org/announcements/postfix-3.4.0.html
另一方面,Dovecot 却有。请参阅此示例配置:
# Default
ssl_cert = </path/to/default/cert
ssl_key = </path/to/default/private/key
# mail.example.it
local_name mail.example.it {
ssl_cert = </etc/letsencrypt/live/mail.example.it
ssl_key = </path/to/mail.example.it/private/key
}
# mail.example.com
local_name mail.example.com {
ssl_cert = </etc/letsencrypt/live/mail.example.com
ssl_key = </path/to/mail.example.com/private/key
}
ssl_key
如果与默认域相同,则可以省略每个域。
答案2
据我所知,这是不可能的。你有两个选择:
- 使用一个域作为服务器应处理的所有其他域的 MX。因此,如果您已为 配置了证书,
example.com
并且还想处理 的邮件example.org
,请在区域中设置指向您的example.com
服务器的 MX 条目example.org
。 - 对您需要的每个域使用具有多个 SAN 的证书。这意味着您只有一个涵盖所有域的证书文件。
答案3
Postfix 3.4 及更高版本现在允许 SNI 映射处理不同域/子域的多个证书:
http://www.postfix.org/postconf.5.html#tls_server_sni_maps
关于使用 Let's Encrypt 正确配置的提示:
http://postfix.1071664.n5.nabble.com/如何使用新服务器-TLS-SNI-feature-3-4-x-td100786.html#a100819
总结一下,用户@MKPostfix 邮件列表说(以防上述链接由于某种原因失效):
----- main.cf -----
# provide the primary certificate for the server, to be used for outgoing connections
smtpd_tls_chain_files =
/etc/letsencrypt/live/servername.serverdom.com/privkey.pem,
/etc/letsencrypt/live/servername.serverdom.com/fullchain.pem
# provide the map to be used when SNI support is enabled
tls_server_sni_maps = hash:/etc/postfix/vmail_ssl.map
-----
----- /etc/postfix/vmail_ssl.map -----
# Compile with postmap -F hash:/etc/postfix/vmail_ssl.map when updating
# One host per line
servername.serverdom.com
/etc/letsencrypt/live/servername.serverdom.com/privkey.pem
/etc/letsencrypt/live/servername.serverdom.com/fullchain.pem
servername.otherdom.com
/etc/letsencrypt/live/servername.otherdom.com/privkey.pem
/etc/letsencrypt/live/servername.otherdom.com/fullchain.pem
-----
然后运行
$ postmap -F hash:/etc/postfix/vmail_ssl.map
postfix
正常重启。
跑步
$ openssl s_client -connect localhost:25 -servername servername.otherdom.com -starttls smtp
$ openssl s_client -connect localhost:25 -servername servername.serverdom.com -starttls smtp
测试:您将在证书详细信息下找到主机名。如果不匹配,它将匹配主机的默认服务器名称。因此,请确保主机的服务器名称在映射文件中。
笔记:我自己还没有测试过,我只是想寻找一些提示如何去做这件事,偶然发现了这个 SF 线程......
答案4
虽然 @Billy 给出了对我来说有用的解决方案Dovecot
,但这两篇帖子对我帮助很大Postfix
:Postfix 和多个 SSL 证书, 和在 postfix 中使用多个“myhostname”。