我有两台服务器,都运行 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
如果您还没有解决这个问题,请随意添加评论/问题,我会很乐意用更适合您情况的信息更新这篇文章。