Postfix MariaDB SSL 连接错误

Postfix MariaDB SSL 连接错误

我有两台服务器,都运行 Ubuntu 21.04。我在一台服务器上安装了 Postfix (v3.5.6),在另一台服务器上安装了 MariaDB (v10.5.12-MariaDB-0ubuntu0.21.04.1)。当 Postfix 尝试连接到 MariaDB 时,它会收到“不支持的协议”错误:

postfix/trivial-rewrite[15106]: warning: connect to mysql server <name_of_db_server>: SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
postfix/trivial-rewrite[15106]: warning: virtual_alias_domains: mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
postfix/trivial-rewrite[15106]: warning: virtual_alias_domains lookup failure
postfix/trivial-rewrite[15106]: warning: virtual_alias_domains: mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem

主文件:

virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

mysql_virtual_alias_maps.cf:

user = postfix
password = password
hosts = ip.address.of.db
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

我可以从 mariadb/mysql shell(mysql -u postfix -h dbserver -p)连接,它使用 SSL/TLS。

我见过很多文章讨论降低一台或另一台机器上的 TLS 版本,但这不是解决办法。如能得到任何帮助,我将不胜感激。

答案1

我遇到了类似的问题(尽管是在 Ubuntu 20.04 LTS 上,使用 MariaDB 10.3.34 和 Postfix 3.4.13),并花了两天的时间才彻底解决它。

尽管您遇到的问题的解决方案可能不同,但影响因素可能相同。

至关重要的是,必须了解 Postfix 通过libmysqlclient库连接到 MySQL/MariaDB。也就是说,Postfix 本身不实现任何连接细节,因此任何此类问题往往与应用于 MySQL 客户端库的设置有关在连接的机器上。我特别提到这一点是因为您在连接机器(运行 Postfix 的机器)上安装的 MySQL 客户端版本/配置可能与 MariaDB 服务器本身完全不同。因此,在排除此故障时,请记住,相关的客户端设置将mysql --version取决于連接机器。

当然,MariaDB 服务器的设置也是一个因素,因为它可以强制使用 TLS 或使其成为可选的,并且可以强制使用特定的 TLS 协议版本。

在您的具体情况下,我会从客户端(Postfix 服务器)尝试以下操作:

mysql -upostfix -p -h xxx.xxx.xxx.xxx --ssl --tls-version=TLSv1.0

(如果命令因不支持的选项或类似情况而失败,则检查版本mysql --version并进行相应调整,https://mariadb.com/kb/en/mysql-command-line-client/#options或者将 MySQL 客户端库升级到与 MariaDB 服务器版本相同的版本。)

此命令既需要通过 TLS --ssl,又通过 指定 TLS 版本--tls-version=TLSv1.0

如果连接失败,则通过迭代--tls-version=TLSv1.1--tls-version=TLSv1.2和 来增加 TLS 版本,直到成功--tls-version=TLSv1.3

连接成功后,将确定 MariaDB 服务器所需的最低 TLS 版本,这是连接(Postfix)计算机在连接​​时必须使用的最低版本。如何在连接机器上强制执行该操作完全取决于 MySQL 客户端库版本(再次使用mysql --version进行检查)。在 MySQL 和 MariaDB 的最近几个主要版本中,相关的 TLS 相关选项已发生变化,因此如果不知道 MySQL 客户端版本,很难提供更具体的建议。话虽如此,以下资源包含有关最新版本 MariaDB(客户端和服务器)的所有相关信息:

https://mariadb.com/kb/en/secure-connections-overview/

假设你正在运行相同的 MariaDB客户如果您在为 MariaDB 服务器运行的 Postfix 机器上安装了相同的版本,那么上述资源包含的逐字示例应该适合您:

在 MariaDB 上服务器

[mariadb]
tls_version = TLSv1.2,TLSv1.3

在 MySQL/MariaDB 客户端(Postfix 服务器)上:

[client-mariadb]
tls_version = TLSv1.2,TLSv1.3

如果您还没有解决这个问题,请随意添加评论/问题,我会很乐意用更适合您情况的信息更新这篇文章。

相关内容