在 Postfix 和 Dovecot 中为多个域设置证书

p0l*_*0lo 8 email-server postfix dovecot ssl-certificate

我不知道如何设置 main.conf 后缀配置文件和 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

非常感谢您的帮助

Sve*_*ven 7

据我所知,这是不可能的。您有两个选择:

  • 使用一个域作为服务器应处理的所有其他域的 MX。因此,如果您为 配置了证书,example.com并且还想处理 的邮件example.org,请将指向您的example.com服务器的 MX 条目设置为该example.org区域。
  • 为您需要的每个域使用具有多个 SAN 的证书。这意味着您只有一个涵盖所有域的证书文件。

  • 我的新手:Let's Encrypt 现在支持 SAN 机制!否则,如果这两个域来自不希望他们的域被其他人使用的不同客户,我建议添加来自服务提供商的第三个域作为两者的证书域。 (3认同)
  • @EsaJokinen:有 100 个名字。`如果您有很多子域,您可能希望将它们组合成一个证书,每个证书最多 100 个名称。` https://letsencrypt.org/docs/rate-limits/ 我不确定,但我相信这是 TLS 证书中 SAN 的一般限制。 (2认同)
  • 所以,这不是一个真正的问题,因为更新域列表会在限制之前很久就让人紧张。:) (2认同)

小智 7

这是通过查看TLS 握手中服务器名称指示 (SNI)标头中未加密的域名来完成的,以在交换任何加密数据之前选择正确的证书。目前(如果发生变化,我将编辑此答案),Postfix 不支持 SNI。

更新:在 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
}
Run Code Online (Sandbox Code Playgroud)

如果每个域ssl_key与默认域相同,您可以省略它。