经过一番努力,我成功配置了 Dovecot,要求用户登录时提供客户端证书,而且效果很好。
但是,我还想设置一个 Web 邮件解决方案 (Roundcube),它需要能够通过 IMAP 进行连接,但似乎无法发送客户端证书。我将其配置为使用端口 143(未加密),因为连接发生在受信任的网络上,考虑到这一点,我将我的本地网络添加到 Dovecot 中,login_trusted_networks
以便纯文本身份验证也能正常工作。
不幸的是,当 Roundcube 连接时,即使连接没有启用 SSL,仍然会要求提供客户端证书。
我已经使用以下命令限制了客户端证书的要求以避免出现 Postfix 问题:
protocol !smtp {
ssl_ca = </etc/dovecot/ca/dovecot-ca.pem
ssl_verify_client_cert = yes
ssl_cert_username_field = commonName
auth_ssl_require_client_cert = yes
auth_ssl_username_from_cert = yes
}
但是我不知道如何进一步将其限制为仅加密连接?我不允许远程访问未加密的协议,除了在服务器之间发送电子邮件所需的端口 25。
需要注意的是,保护 IMAPS 连接的相同证书也用于客户端身份验证nginx
,因此 Web 邮件已受到证书的限制,尽管我可能会切换到其他第二层身份验证以实现移动性(例如某种双因素 API)。
答案1
您可以配置 Roundcube 以向 Dovecot 提供客户端证书。在 Roundcube 的 config.inc.php 中:
$config['default_host'] = 'ssl://localhost';
$配置['默认端口'] = 993;
// IMAP 套接字上下文选项
// 看https://php.net/manual/en/context.ssl.php
// 通过 SSL 提供客户端证书,这是 Dovecot 所要求的。
$config['imap_conn_options'] = 数组(
'ssl' => 数组(
'local_cert' => '/Path/To/YourRoundcubeClient.crt',
'local_pk' => '/Path/To/YourRoundcubeClient.key'
),
(英文):