安全套接字可用于组成员之间的组通信连接。
组复制系统变量 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 连接协议的支持。MySQL 客户端(包括充当客户端的组复制服务器实例)如果使用已弃用的 TLS 协议版本,则不会向用户返回警告。有关更多信息,请参阅 删除对 TLSv1 和 TLSv1.1 协议的支持。
MySQL 9.0 支持 TLSv1.3 协议,前提是 MySQL 服务器是使用 OpenSSL 1.1.1 编译的。服务器在启动时检查 OpenSSL 的版本;如果低于 1.1.1,则从与 TLS 版本相关的所有服务器系统变量(包括
group_replication_recovery_tls_version
)的默认值中删除 TLSv1.3。MySQL 9.0 组复制支持 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,但现有组成员都支持 TLSv1.3 并在彼此之间的连接中使用该版本,则如果现有组成员已允许使用合适的较低版本 TLS 协议,或者如果您将它们配置为这样做,则该成员可以加入。在这种情况下,OpenSSL 对从每个成员到加入成员的连接使用较低版本的 TLS 协议。每个成员与其他现有成员的连接继续使用两个成员都支持的最高可用协议。
您可以在运行时更改 tls_version
系统变量,以更改服务器允许的 TLS 协议版本列表。对于组复制,ALTER INSTANCE RELOAD TLS
语句(根据定义上下文的系统变量的当前值重新配置服务器的 TLS 上下文)不会更改组复制运行时组通信连接的 TLS 上下文。要将重新配置应用于这些连接,必须在更改了 tls_version
系统变量的成员上执行 STOP GROUP_REPLICATION
,然后执行 START GROUP_REPLICATION
以重新启动组复制。同样,如果要使组的所有成员都更改为使用更高或更低的 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 节“保护分布式恢复连接的安全”。