我有一个 Dovecot 服务器,它使用 MariaDB 作为虚拟邮箱。MariaDB 服务器位于同一 LAN 中的另一台计算机上。
我们最近在 MariaDB 机器上启用了 TLS。
Dovecot 在关闭时工作正常,但当我们在 MariaDB 配置文件中打开require_secure_transport
时无法连接。require_secure_transport
错误是:
Error: mysql(xxx.xxx.xxx.xxx): Connect failed to database (db_name): Access denied for user 'db_user'@'xxx.xxx.xxx.xxx' (using password: YES)
这看起来像是一个身份验证错误,但在关闭时使用相同的用户和密码连接可以正常工作require_secure_transport
,因此 MariaDB 拒绝连接,因为 Dovecot 不使用 TLS。
连接字符串/etc/dovecot/dovecot-sql.conf.ext
如下所示:
connect = host=db0.mydomain.com dbname=my_db user=the_user password=secret ssl_ca=/etc/ssl/authority/authority.crt
配置文件说:
ssl_ca、ssl_ca_path - 设置其中之一或两者以启用 SSL
我可以获得错误的更多详细信息吗?例如,如果 TLS 版本不匹配,我可以将其显示在某处吗?
Dovecot 中是否有需要更改的设置?
更新:添加ssl_verify_server_cert=no
到连接字符串中/etc/dovecot/dovecot-sql.conf.ext
允许连接正常工作。
所以这似乎是证书验证错误。但如果没有更详细的日志记录,我不确定它不喜欢证书的什么。
证书由 CA 在连接字符串中签名。最好知道它正在检查什么通用名称,以及 Dovecot 是否会使用任何 SAN 值作为证书。
我通过在本地网络上设置一个包含 imap 和 MariaDB 服务器主机名记录的 DNS 服务器,然后在两台
resolv.conf
计算机上进行设置来使用它,使其正常工作。Dovecot 现在可以毫无问题地连接
require_secure_transport
MariaDB 中的设置以及ssl_verify_server_cert=yes
Dovecot 连接字符串中的设置。如果没有更详细的调试错误消息,我最好的猜测是 TLS 实现会忽略 中的映射
/etc/hosts
,并且需要使用实际的 DNS 服务器。