20.6.2 使用 Secure Socket Layer (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 |
PEM格式的SSL私钥文件路径名。在客户端-side,这是客户端私钥。在服务器-side,这是服务器私钥。 |
ssl_cert |
PEM格式的SSL公钥证书文件路径名。在客户端-side,这是客户端公钥证书。在服务器-side,这是服务器公钥证书。 |
ssl_ca |
PEM格式的证书颁发机构(CA)证书文件路径名。 |
ssl_capath |
trusted 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协议版本返回给用户。请参阅Removal of Support for the TLSv1 and TLSv1.1 Protocols获取更多信息。
-
MySQL 8.4 支持 TLSv1.3 协议,假设 MySQL 服务器使用 OpenSSL 1.1.1 编译。服务器在启动时检查 OpenSSL 的版本,如果低于 1.1.1,TLSv1.3 将从所有与 TLS 版本相关的服务器系统变量中默认值中删除,包括
group_replication_recovery_tls_version
。 -
MySQL 8.4 Group Replication 支持 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),Group Replication 可能无法建立群组通信连接。
在复制组中,OpenSSL 会协商所有成员支持的最高TLS协议。加入的成员,如果配置为只使用TLSv1.3(tls_version=TLSv1.3
),不能加入不支持TLSv1.3的复制组,因为该组成员使用低版本的TLS协议。要将成员加入组,您必须配置加入的成员也允许使用由现有组成员支持的低版本TLS协议。反之,如果加入的成员不支持TLSv1.3,但现有组成员都支持并且在彼此之间使用该版本连接,那么成员可以加入,如果现有组成员已经允许使用合适的低版本TLS协议,或者您配置它们以便这样做。在这种情况下,OpenSSL 对每个成员到加入成员的连接使用低版本的TLS协议,而每个成员对其他现有成员的连接继续使用双方支持的最高可用协议。
您可以在运行时更改tls_version
系统变量,以改变服务器允许的TLS协议版本列表。对于Group Replication,执行ALTER INSTANCE RELOAD TLS
语句,该语句从当前系统变量的值重新配置服务器的TLS上下文,而不改变Group Replication的组通信连接中的TLS上下文。在应用这些更改,您必须执行STOP GROUP_REPLICATION
,然后是START GROUP_REPLICATION
以重新启动Group Replication在您更改了tls_version
系统变量的成员或成员上。类似地,如果您想使所有组成员都切换到使用更高或更低的TLS协议版本,您必须在更改允许的TLS协议版本列表后对Group Replication的成员进行滚动重启,以便OpenSSL在滚动重启完成时negotiate使用更高的TLS协议版本。要在运行时更改允许的TLS协议版本,请见第8.3.2节,“加密连接TLS协议和密码”和服务器端运行时配置和监控加密连接.
以下是一个从my.cnf
文件中配置服务器SSL和激活Group Replication组通信连接的示例部分:
[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上下文,从当前定义上下文的系统变量中获取值,而不改变Group Replication的组通信连接中的TLS上下文。在应用重新配置到这些连接时,您必须执行STOP GROUP_REPLICATION
,然后执行START GROUP_REPLICATION
以重新启动Group Replication。
在分布式恢复中,加入成员与现有成员之间建立的连接不受上述选项描述的保护。这些连接使用Group Replication专门用于分布式恢复的SSL选项,这些选项在第20.6.3.2节,“Secure Socket Layer (SSL) Connections for Distributed Recovery”中有描述。
使用 MySQL 通信栈(group_replication_communication_stack=MYSQL)时: 分布式恢复组的安全设置将应用于组成员之间的正常通信。请参阅第20.6.3节,“Securing Distributed Recovery Connections”了解如何配置安全设置。