5

我正在尝试使用 SSL 设置具有多个虚拟主机的 Dovecot。

我已经设置了我的主域(example.de)和我的虚拟主机(example2.com 和 example3.co.uk),我正在使用本地选项。

我的问题:

当我连接到我的服务器时,它抱怨我的主域和其他域上的证书主机名 (example3.co.uk) 错误。

如何让 dovecot 为每个主机使用正确的证书?

这是我的鸽舍配置:

listen = *
ssl = yes
protocols = imap pop3
disable_plaintext_auth = no
auth_mechanisms = plain login
mail_access_groups = vmail
default_login_user = vmail
first_valid_uid = 2222
first_valid_gid = 2222
#mail_location = maildir:~/Maildir
mail_location = maildir:/home/vmail/%d/%n

passdb {
    driver = passwd-file
    args = scheme=SHA1 /etc/dovecot/passwd
}
userdb {
    driver = static
    args = uid=2222 gid=2222 home=/home/vmail/%d/%n allow_all_users=yes
}
service auth {
    unix_listener auth-client {
        group = postfix
        mode = 0660
        user = root
    }
    user = root
}
service imap-login {
  process_min_avail = 1
  user = vmail
}

ssl_cert = </etc/pki/tls/certs/example.de.crt
ssl_key = </etc/pki/tls/private/example.de.key

local ohmygodpresents.com {
  ssl_cert = </etc/pki/tls/certs/example2.com.crt
  ssl_key = </etc/pki/tls/private/example2.com.key
}
local ohmygodpresents.co.uk {
  ssl_cert = </etc/pki/tls/certs/example3.co.uk.crt
  ssl_key = </etc/pki/tls/private/example3.co.uk.key
}
4

2 回答 2

6

如何让 dovecot 为每个主机使用正确的证书?

它本身不是 Dovecot 。

客户端需要使用 TLS 1.0 或更高版本,并且需要使用服务器名称指示 (SNI) 扩展。否则,Dovecot 在设置通道时不知道客户端尝试连接到哪个虚拟服务器。

您可以使用 OpenSSL 复制/测试它s_client。例如,一个“好”的连接:

openssl s_client -tls1 -starttls smtp -connect mail.example.com:587 -servername mail.example.com

在上面的示例中,Dovecot 将知道example.com在 SSL/TLS 连接启动时发送证书。即使STARTTLS在邮件中使用了扩展名,Dovecot也不知道虚拟服务器,因为该RCPT命令尚未发送。由于RCPT命令尚未发送,Dovecot 不知道用户或他/她的域。

这是一个“坏”的连接。它的 SSLv3,因此它不能使用 SNI(SNI 是 TLS 扩展):

openssl s_client -ssl3 -starttls smtp -connect mail.example.com:587

这是另一个“坏”的连接。它的 TLS 1.0,但它不使用 SNI:

openssl s_client -tls1 -starttls smtp -connect mail.example.com:587

您还可以使用 Wireshark 进行复制/测试/观察。SNI 作为ClientHello. 因此,您将能够看到协议、密码套件、SNI 等扩展以及其他参数。SSL/TLS 的握手和密钥交换中的所有内容都是纯文本(有些人放弃)。纯文本消息稍后在发送消息时进行完整性检查Finished

您可以禁用 SSLv2/SSLv3 并强制使用 TLS,大多数客户端都会按预期工作。但是,客户端不必发送 SNI 扩展。Windows XP 客户端将是一个问题——它们使用 TLS 1.0 但忽略了 SNI。所以除了使用现代客户端之外,真的没有其他解决办法。

您的另一个选择是创建“超级证书”。也就是说,使用包含邮件服务器服务的所有 DNS 名称的证书。在您的情况下,请使用具有 、 、 等 SAN 的证书DNS:3und80.deDNS:ohmygodpresents.co.uk每次DNS:example1.com添加新域或删除现有域时,您都必须获取新证书。

于 2014-05-05T16:07:30.500 回答
0

请参阅https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/

它不是

local domain.com { ...

这是

local_name domain.com { ...
于 2021-09-27T19:34:22.443 回答