安全套接字可用于组成员之间的组通信连接。
组复制系统变量 group_replication_ssl_mode
用于激活对组通信连接使用 SSL 并指定连接的安全模式。默认设置表示不使用 SSL。该选项具有以下可能的值
表 20.1 group_replication_ssl_mode 配置值
值 | 描述 |
---|---|
DISABLED |
建立未加密的连接(默认)。 |
REQUIRED |
如果服务器支持安全连接,则建立安全连接。 |
VERIFY_CA |
类似于 |
VERIFY_IDENTITY |
类似于 |
如果使用 SSL,则配置安全连接的方法取决于是使用 XCom 还是 MySQL 通信堆栈进行组通信。
使用 XCom 通信堆栈时 (group_replication_communication_stack=XCOM
): 组复制的组通信连接的其余配置取自服务器的 SSL 配置。有关配置服务器 SSL 的选项的更多信息,请参阅加密连接的命令选项。应用于组复制的组通信连接的服务器 SSL 选项如下
表 20.2 SSL 选项
服务器配置 | 描述 |
---|---|
ssl_key |
PEM 格式的 SSL 私钥文件的路径名。在客户端,这是客户端私钥。在服务器端,这是服务器私钥。 |
ssl_cert |
PEM 格式的 SSL 公钥证书文件的路径名。在客户端,这是客户端公钥证书。在服务器端,这是服务器公钥证书。 |
ssl_ca |
PEM 格式的证书颁发机构 (CA) 证书文件的路径名。 |
ssl_capath |
包含 PEM 格式的受信任 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。 |
ssl_crl |
包含 PEM 格式的证书吊销列表的文件的路径名。 |
ssl_crlpath |
包含 PEM 格式的证书吊销列表文件的目录的路径名。 |
ssl_cipher |
加密连接允许使用的密码列表。 |
tls_version |
服务器允许用于加密连接的 TLS 协议列表。 |
tls_ciphersuites |
服务器允许用于加密连接的 TLSv1.3 密码套件。 |
MySQL 8.0 中移除了对 TLSv1 和 TLSv1.1 连接协议的支持。如果使用已弃用的 TLS 协议版本,MySQL 客户端(包括充当客户端的组复制服务器实例)不会向用户返回警告。有关更多信息,请参阅移除对 TLSv1 和 TLSv1.1 协议的支持。
MySQL 8.4 支持 TLSv1.3 协议,前提是使用 OpenSSL 1.1.1 编译 MySQL 服务器。服务器在启动时检查 OpenSSL 的版本;如果低于 1.1.1,则从与 TLS 版本相关的所有服务器系统变量(包括
group_replication_recovery_tls_version
)的默认值中删除 TLSv1.3。MySQL 8.4 组复制支持 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 上下文)不会在组复制运行时更改组复制的组通信连接的 TLS 上下文。要将重新配置应用于这些连接,您必须先执行 STOP GROUP_REPLICATION
,然后再执行 START GROUP_REPLICATION
,以在您更改了 tls_version
系统变量的成员上重新启动组复制。同样,如果要使组的所有成员都更改为使用更高或更低的 TLS 协议版本,则必须在更改允许的 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 节 “保护分布式恢复连接的安全”。