Dovecot与虚拟主机和SSL - 错误的证书?

 不要再想Ta 发布于 2023-01-16 16:53

我正在尝试使用SSL设置多个vhosts的Dovecot.

我已经设置了我的主域名(example.de)和我的vhosts(example2.com&example3.co.uk)我正在使用本地-option.

我的问题:

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

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

这是我的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 = 

jww.. 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.de,DNS:ohmygodpresents.co.uk,DNS:example1.com等每次添加一个新的域或删除现有的域,您将获得一个新的证书.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有