Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Securing Group Communication Connections with Secure Socket Layer (SSL)

20.6.2 使用安全套接口层(SSL)保护组通信连接

可以使用安全套接口层(SSL)保护组通信连接。

Group Replication 系统变量 group_replication_ssl_mode 用于激活 SSL 对组通信连接的使用,并指定连接的安全模式。默认设置意味着不使用 SSL。该选项具有以下可能的值:

表 20.1 group_replication_ssl_mode 配置值

Value

描述

DISABLED

建立未加密的连接(默认)。

REQUIRED

如果服务器支持安全连接,则建立安全连接。

VERIFY_CA

类似于 REQUIRED,但另外验证服务器 TLS 证书是否与配置的证书颁发机构(CA)证书匹配。

VERIFY_IDENTITY

类似于 VERIFY_CA,但另外验证服务器证书是否与连接的主机匹配。


如果使用 SSL,配置安全连接的方式取决于是否使用 XCom 或 MySQL 通信栈进行组通信。

使用 XCom 通信栈 (group_replication_communication_stack=XCOM):  Group Replication 的组通信连接的其余配置来自服务器的 SSL 配置。有关配置服务器 SSL 的选项的更多信息,请参阅 命令选项用于加密连接。应用于 Group Replication 的组通信连接的服务器 SSL 选项如下:

表 20.2 SSL 选项

Server Configuration Description
ssl_key SSL 私钥文件的路径名,在 PEM 格式中。在客户端,这是客户端私钥。在服务器端,这是服务器私钥。
ssl_cert SSL 公钥证书文件的路径名,在 PEM 格式中。在客户端,这是客户端公钥证书。在服务器端,这是服务器公钥证书。
ssl_ca 证书颁发机构(CA)证书文件的路径名,在 PEM 格式中。
ssl_capath 包含受信任的 SSL 证书颁发机构(CA)证书文件的目录的路径名,在 PEM 格式中。
ssl_crl 证书撤销列表文件的路径名,在 PEM 格式中。
ssl_crlpath 包含证书撤销列表文件的目录的路径名,在 PEM 格式中。
ssl_cipher 允许的加密连接密码列表。
tls_version 服务器允许的 TLS 协议版本列表。
tls_ciphersuites 服务器允许的 TLSv1.3 密码套件列表。

Important
  • 从 MySQL 8.0 开始,不再支持 TLSv1 和 TLSv1.1 连接协议。MySQL 客户端,包括作为客户端的 Group Replication 服务器实例,不会向用户返回弃用 TLS 协议版本的警告。有关更多信息,请参阅 弃用 TLSv1 和 TLSv1.1 协议

  • MySQL 8.3 支持 TLSv1.3 协议,前提是 MySQL 服务器使用 OpenSSL 1.1.1 编译。如果 OpenSSL 版本低于 1.1.1,TLSv1.3 将从所有服务器系统变量的默认值中删除,包括 group_replication_recovery_tls_version

  • MySQL 8.3 组复制支持 TLSv1.3。

  • 使用 group_replication_recovery_tls_versiongroup_replication_recovery_tls_ciphersuites 配置客户端支持任何选择的密码套件,包括仅非默认密码套件。

  • tls_version 系统变量指定的 TLS 协议列表中,请确保指定的版本是连续的(例如,TLSv1.2,TLSv1.3)。如果列表中有任何间隙(例如,如果您指定了 TLSv1,TLSv1.2,省略 TLS 1.1),组复制可能无法建立组通信连接。

在复制组中,OpenSSL 会协商使用最高的 TLS 协议版本,该版本由所有成员支持。如果加入的成员仅配置为使用 TLSv1.3 (tls_version=TLSv1.3),则无法加入复制组,其中任何现有成员不支持 TLSv1.3,因为组成员在这种情况下使用较低的 TLS 协议版本。要加入成员到组,您必须配置加入的成员也允许使用较低的 TLS 协议版本,支持现有组成员。相反,如果加入的成员不支持 TLSv1.3,但现有组成员都支持并使用该版本连接彼此,则成员可以加入,如果现有组成员已经允许使用合适的较低 TLS 协议版本,或者如果您配置它们这样做。在这种情况下,OpenSSL 使用较低的 TLS 协议版本连接每个成员到加入的成员。每个成员到其他现有成员的连接继续使用最高可用的协议版本。

您可以在运行时更改 tls_version 系统变量,以更改服务器允许的 TLS 协议版本列表。对于组复制,ALTER INSTANCE RELOAD TLS 语句,不会更改组复制的组通信连接的 TLS 上下文,而是在组复制运行时。要应用重新配置到这些连接,您必须执行 STOP GROUP_REPLICATION,然后执行 START GROUP_REPLICATION,以重新启动组复制在成员或成员上更改了 tls_version 系统变量。同样,如果您想让组的所有成员都使用较高或较低的 TLS 协议版本,您必须在成员上执行滚动重新启动组复制,以便 OpenSSL 在滚动重新启动完成时协商使用较高的 TLS 协议版本。有关在运行时更改允许的 TLS 协议版本的说明,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码套件”服务器端运行时配置和监控加密连接

以下示例显示了 my.cnf 文件的一部分,该文件在服务器上配置 SSL,并激活 SSL 用于组复制组通信连接:

[mysqld]
ssl_ca = "cacert.pem"
ssl_capath = "/.../ca_directory"
ssl_cert = "server-cert.pem"
ssl_cipher = "DHE-RSA-AEs256-SHA"
ssl_crl = "crl-server-revoked.crl"
ssl_crlpath = "/.../crl_directory"
ssl_key = "server-key.pem"
group_replication_ssl_mode= REQUIRED
Important

ALTER INSTANCE RELOAD TLS 语句重新配置服务器的 TLS 上下文,以当前系统变量的值定义上下文,但是在组复制运行时,不会更改组复制的组通信连接的 TLS 上下文。要将重新配置应用于这些连接,您必须执行 STOP GROUP_REPLICATION,然后执行 START GROUP_REPLICATION 以重新启动组复制。

加入成员与现有成员之间的分布式恢复连接不受上述选项的覆盖。这些连接使用组复制的专用分布式恢复 SSL 选项,该选项在 第 20.6.3.2 节,“安全套接字层 (SSL) 连接用于分布式恢复” 中描述。

使用 MySQL 通信栈 (group_replication_communication_stack=MYSQL) 时: 组的分布式恢复安全设置将应用于组成员之间的正常通信。请参阅 第 20.6.3 节,“保护分布式恢复连接” 以了解如何配置安全设置。