我试图使用SSL设置多个虚拟主机的Dovecot。
我已经设置了我的主域名(example.de)和我的vhosts(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
}
答案 0 :(得分: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
在上面的示例中,当启动SSL / TLS连接时,Dovecot将知道发送example.com
的证书。即使在邮件中使用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名称的证书。在您的情况下,使用一个包含DNS:3und80.de
,DNS:ohmygodpresents.co.uk
,DNS:example1.com
等SAN的证书。每次添加新域或删除现有域时,都必须获得新域证书。