可以使用安全套接口层(SSL)保护组通信连接。
Group Replication 系统变量 group_replication_ssl_mode
用于激活 SSL 对组通信连接的使用,并指定连接的安全模式。默认设置意味着不使用 SSL。该选项具有以下可能的值:
表 20.1 group_replication_ssl_mode 配置值
Value |
描述 |
---|---|
DISABLED |
建立未加密的连接(默认)。 |
REQUIRED |
如果服务器支持安全连接,则建立安全连接。 |
VERIFY_CA |
类似于 |
VERIFY_IDENTITY |
类似于 |
如果使用 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 密码套件列表。 |
-
从 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_version
和group_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
该 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 节,“保护分布式恢复连接” 以了解如何配置安全设置。