SSL 证书在 SNI 服务器上无效 - Dovecot/Postfix

SSL 证书在 SNI 服务器上无效 - Dovecot/Postfix

我在运行 Raspbian 10(Buster)的 Raspberry Pi 上有一个 Dovecot/Postfix 服务器,我在同一台服务器上运行两个域名,为了保护隐私,我将其称为 DOMAIN 1 和 DOMAIN 2。两者都有与之关联的电子邮件地址,并且两个域都可以正常发送和接收电子邮件。

但是,每当我尝试使用 Outlook 检查电子邮件时,我都会收到域 2 的警告“您所连接的服务器正在使用无法验证的安全证书。目标主体名称不正确。”但域 1 没有收到警告。

当我“查看证书”时,该证书声称它是颁发给域 1。

我在 Dovecot 和 Postfix 中使用 SNI 设置了域,并将域 1 作为默认域,如下所示:

/etc/postfix/vmail_ssl.map
mail.DOMAIN1.com /etc/letsencrypt/live/DOMAIN1.com/privkey.pem /etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
mail.DOMAIN2.com /etc/letsencrypt/live/DOMAIN2.com/privkey.pem /etc/letsencrypt/live/DOMAIN2.com/fullchain.pem

/etc/dovecot/ssl-sni.conf
local_name mail.DOMAIN1.com {
ssl_cert = </etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN1.com/privkey.pem
}
local_name mail.DOMAIN2.com {
ssl_cert = </etc/letsencrypt/live/DOMAIN2.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN2.com/privkey.pem
}

在 Dovecot 的 SSL Conf 中如下

/etc/dovecot/conf.d/10-ssl.conf
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/dovecot/private/dovecot.pem
#ssl_key = </etc/dovecot/private/dovecot.key
# default
ssl_cert = </etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN1.com/privkey.pem

# DOMAIN2.com
local_name mail.DOMAIN2.com {
        ssl_cert = </etc/letsencrypt/live/DOMAIN2.com/fullchain.pem
        ssl_key = </etc/letsencrypt/live/DOMAIN2.com/privkey.pem
}

我对设置这些东西没有太多经验,但在我看来,Dovecot 在所有情况下都默认为 DOMAIN1 提供 SSL 证书,而在建立连接检查该域的邮件时不为 DOMAIN2 提供证书...虽然我可能完全错了...有人能指出我做错了什么以及我需要做什么才能使 SNI 正常工作吗?我已经尽力了,但我的最好似乎还不够好...

谢谢!

答案1

SNI 对于邮件来说仍然不常见。虽然一些邮件服务器(如 dovecot)支持它,但许多邮件客户端并不支持。但是,如果客户端不使用 SNI,则服务器会发送一些默认证书。因此,它适用于一个域(默认),但不适用于另一个域。

答案2

我遇到了和你一样的问题。我删除了 letsencrypt 中所有以前的证书,但在通过以下方式测试证书时删除了最新的证书:

openssl s_client -connect localhost:25 -服务器名称 mail.mydomain.com -starttls smtp

我仍收到旧证书。我发现的解决方案是重建 vmail 数据库。

postmap -F hash:./vmail-ssl.map

相关内容