我有一台 Dovecot 服务器,它使用 MariaDB 作为虚拟邮箱。MariaDB 服务器位于同一 LAN 中的另一台机器上。
我们最近在 MariaDB 机器上启用了 TLS。
Dovecot 在require_secure_transport
关闭时工作正常,但当我们require_secure_transport
在 MariaDB 配置文件中打开时却无法连接。
错误是:
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 值。
答案1
我通过在本地网络上设置一个 DNS 服务器来使其正常工作,该服务器包含 imap 和 MariaDB 服务器的主机名记录,然后resolv.conf
在两台机器上进行设置以使用它。
require_secure_transport
Dovecot 现在可以通过MariaDB 中的设置和ssl_verify_server_cert=yes
Dovecot 的连接字符串中的设置顺利进行连接。
在没有更详细的错误消息进行调试的情况下,我最好的猜测是 TLS 实现忽略了中的映射/etc/hosts
,并且需要使用实际的 DNS 服务器。