支持的连接TLS协议
MySQL支持使用TLSv1,TLSv1.1,TLSv1.2和TLSv1.3协议的加密连接,这些协议按从低到高的顺序列出。实际允许连接的协议集受多种因素影响:
MySQL配置。可以在服务器端和客户端上都配置允许的TLS协议,以仅包括支持的TLS协议的子集。双方的配置必须至少包含一个共同的协议,否则连接尝试无法协商要使用的协议。有关详细信息,请参见 连接TLS协议协商。
系统范围的主机配置。主机系统可能只允许某些TLS协议,这意味着即使MySQL本身允许它们,MySQL连接也不能使用不允许的协议:
假设MySQL配置允许TLSv1,TLSv1.1和TLSv1.2,但是您的主机系统配置仅允许使用TLSv1.2或更高版本的连接。在这种情况下,即使将MySQL配置为允许使用TLSv1或TLSv1.1的MySQL连接,也无法建立,因为主机系统不允许它们。
如果MySQL配置允许TLSv1,TLSv1.1和TLSv1.2,但是您的主机系统配置仅允许使用TLSv1.3或更高版本的连接,则您将无法建立MySQL连接,因为主机不允许MySQL允许的协议系统。
此问题的解决方法包括:
更改系统范围的主机配置,以允许其他TLS协议。请查阅操作系统文档以获取指示。例如,您的系统可能具有一个/etc/ssl/openssl.cnf包含以下行的文件,以将TLS协议限制为TLSv1.2或更高版本:
[system_default_sect]
MinProtocol = TLSv1.2
将值更改为较低的协议版本或 None使系统更宽松。这种解决方法的缺点是,允许较低(较不安全)的协议可能会带来不利的安全后果。
如果您不能或不想更改主机系统TLS配置,请更改MySQL应用程序以使用主机系统允许的更高(更安全)的TLS协议。对于仅支持较低协议版本的MySQL的较早版本可能无法实现。例如,TLSv1是MySQL 5.6.46之前唯一受支持的协议,因此,即使客户端来自支持更高协议版本的较新MySQL版本,尝试连接到5.6.46之前的服务器的尝试也会失败。在这种情况下,可能需要升级到支持其他TLS版本的MySQL版本。
SSL库。如果SSL库不支持特定协议,则MySQL以及下面讨论中指定该协议的任何部分均不适用。
注意
TLSv1.3协议的支持自MySQL 8.0.16起(对于组复制组件自MySQL 8.0.18起)。此外,要使用TLSv1.3,必须使用OpenSSL 1.1.1或更高版本来编译MySQL服务器和客户端应用程序。
连接TLS协议配置
在服务器端,tls_version系统变量的值 确定MySQL服务器允许进行加密连接的TLS协议。的 tls_version该值适用于来自客户端的连接,以该服务器实例为主的常规主/从复制连接,组复制组通信连接以及以该服务器实例为施主的组复制分布式恢复连接。变量值是该列表中一个或多个逗号分隔协议版本的列表(不区分大小写):TLSv1,TLSv1.1,TLSv1.2和(如果可用)TLSV1.3。默认情况下,此变量列出用于编译MySQL的SSL库支持的所有协议。要确定tls_version运行时的值,请使用以下语句:
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| tls_version | TLSv1,TLSv1.1,TLSv1.2 |
+---------------+-----------------------+
要更改的值 tls_version,请在服务器启动时进行设置。例如,要允许使用TLSv1.1或TLSv1.2协议的连接但禁止使用安全性较低的TLSv1协议的连接,请在服务器my.cnf文件中使用以下几行 ÿ