### 18.6.2 使用安全套接字层 (SSL) 保护组通信连接

[](<>)[](<>)

安全套接字可用于组成员之间的组通信连接。

组复制系统变量[`group_replication_ssl_mode`](group-replication-options.html#sysvar_group_replication_ssl_mode)用于激活对组通信连接使用 SSL 并指定连接的安全模式。默认设置意味着不使用 SSL。该选项具有以下可能的值：

[](<>)

**表 18.1 组\_复制\_ssl\_模式配置值**

| 价值 | 描述 |
| --- | --- |
| 已禁用 | 建立未加密的连接（默认）。 |
| 必需的 | 如果服务器支持安全连接，则建立安全连接。 |
| 核实\_加州 | 与 REQUIRED 类似，但另外根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书。 |
| 核实\_身份 | 喜欢 VERIFY_CA，但另外验证服务器证书是否与尝试连接的主机匹配。 |

如果使用 SSL，则配置安全连接的方式取决于是使用 XCom 还是 MySQL 通信堆栈进行组通信（从 MySQL 8.0.27 开始可以在两者之间进行选择）。

**使用 XCom 通信堆栈时（`group_replication_communication_stack=XCOM`):**Group Replication 的组通信连接的其余配置取自服务器的 SSL 配置。有关配置服务器 SSL 的选项的更多信息，请参阅[加密连接的命令选项](connection-options.html#encrypted-connection-options).应用于 Group Replication 的组通信连接的服务器 SSL 选项如下：

[](<>)

**表 18.2 SSL 选项**

| 服务器配置 | 描述 |
| ----- | --- |
| [`ssl_key`](server-system-variables.html#sysvar_ssl_key) | PEM 格式的 SSL 私钥文件的路径名。在客户端，这是客户端私钥。在服务器端，这是服务器私钥。 |
| [`ssl_cert`](server-system-variables.html#sysvar_ssl_cert) | PEM 格式的 SSL 公钥证书文件的路径名。在客户端，这是客户端公钥证书。在服务器端，这是服务器公钥证书。 |
| [`ssl_ca`](server-system-variables.html#sysvar_ssl_ca) | PEM 格式的证书颁发机构 (CA) 证书文件的路径名。 |
| [`ssl_capath`](server-system-variables.html#sysvar_ssl_capath) | 包含 PEM 格式的受信任 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。 |
| [`ssl_crl`](server-system-variables.html#sysvar_ssl_crl) | 包含 PEM 格式的证书吊销列表的文件的路径名。 |
| [`ssl_crlpath`](server-system-variables.html#sysvar_ssl_crlpath) | 包含 PEM 格式的证书吊销列表文件的目录的路径名。 |
| [`ssl_cipher`](server-system-variables.html#sysvar_ssl_cipher) | 加密连接的允许密码列表。 |
| [`tls_version`](server-system-variables.html#sysvar_tls_version) | 服务器允许加密连接的 TLS 协议列表。 |
| [`tls_ciphersuites`](server-system-variables.html#sysvar_tls_ciphersuites) | 服务器允许加密连接的 TLSv1.3 密码套件。 |

重要的

-   自 MySQL 8.0.28 起，对 TLSv1 和 TLSv1.1 连接协议的支持已从 MySQL Server 中删除。这些协议已从 MySQL 8.0.26 中弃用，但如果使用已弃用的 TLS 协议版本，MySQL 服务器客户端（包括充当客户端的 Group Replication 服务器实例）不会向用户返回警告。看[拆除TLSv1和TLSv1的支架。1.协议](encrypted-connection-protocols-ciphers.html#encrypted-connection-deprecated-protocols)了解更多信息。

-   对TLSv1的支持。3协议从MySQL 8.0.16开始在MySQL服务器中可用，前提是MySQL服务器是使用OpenSSL 1.1.1编译的。服务器在启动时检查OpenSSL的版本，如果低于1.1.1，则检查TLSv1。3从与TLS版本（包括[`组\u复制\u恢复\u tls\u版本`](group-replication-options.html#sysvar_group_replication_recovery_tls_version)系统变量）。

-   组复制支持TLSv1。3来自MySQL 8.0.18。在MySQL 8.0.16和MySQL 8.0.17中，如果服务器支持TLSv1。3、组通信引擎不支持该协议，组复制无法使用该协议。

-   在MySQL 8.0.18中，TLSv1。3可用于分布式恢复连接的组复制，但[`组\u复制\u恢复\u tls\u版本`](group-replication-options.html#sysvar_group_replication_recovery_tls_version)和[`组\u复制\u恢复\u tls\u密码套件`](group-replication-options.html#sysvar_group_replication_recovery_tls_ciphersuites)系统变量不可用。因此，捐赠服务器必须允许使用至少一个TLSv1。3默认启用的密码套件，如中所列[第6.3.2节，“加密连接TLS协议和密码”](encrypted-connection-protocols-ciphers.html)。从MySQL 8.0.19中，您可以使用这些选项为任何选择的密码套件配置客户端支持，如果需要，仅包括非默认密码套件。

-   在中指定的TLS协议列表中[`tls_版本`](server-system-variables.html#sysvar_tls_version)系统变量，确保指定的版本是连续的（例如，`TLSv1。2、TLSv1。3.`).如果协议列表中存在任何漏洞（例如，如果您指定`TLSv1，TLSv1。2.`，省略TLS 1.1）组复制可能无法建立组通信连接。

    在复制组中，OpenSSL协商所有成员支持的最高TLS协议的使用。配置为仅使用TLSv1的加入成员。3 ([`tls_version=TLSv1。3.`](server-system-variables.html#sysvar_tls_version))无法加入任何现有成员不支持TLSv1的复制组。3，因为在这种情况下，组成员使用的是较低的TLS协议版本。要将成员加入组，必须将加入成员配置为还允许使用现有组成员支持的较低TLS协议版本。相反，如果加入成员不支持TLSv1。3，但现有组成员都使用该版本进行相互连接，如果现有组成员已经允许使用合适的较低TLS协议版本，或者如果您将其配置为这样做，则该成员可以加入。在这种情况下，OpenSSL对从每个成员到加入成员的连接使用较低的TLS协议版本。每个成员与其他现有成员的连接继续使用两个成员支持的最高可用协议。

    在MySQL 8.0.16中，您可以更改[`tls_版本`](server-system-variables.html#sysvar_tls_version)系统变量在运行时更改服务器允许的TLS协议版本列表。请注意，对于组复制[`改变实例重新加载TLS`](alter-instance.html#alter-instance-reload-tls)语句根据定义上下文的系统变量的当前值重新配置服务器的TLS上下文，在组复制运行时不会更改组复制的组通信连接的TLS上下文。要将重新配置应用于这些连接，必须执行[`停止组复制`](stop-group-replication.html)然后[`启动组复制`](start-group-replication.html)要在更改组的一个或多个成员上重新启动组复制，请执行以下操作：[`tls_版本`](server-system-variables.html#sysvar_tls_version)系统变量。类似地，如果希望将组的所有成员更改为使用更高或更低的TLS协议版本，则必须在更改允许的TLS协议版本列表后对成员执行组复制的滚动重启，以便在滚动重启完成时，OpenSSL协商使用更高的TLS协议版本。有关在运行时更改允许的TLS协议版本列表的说明，请参阅[第6.3.2节，“加密连接TLS协议和密码”](encrypted-connection-protocols-ciphers.html)和[服务器端运行时配置和监控加密连接](using-encrypted-connections.html#using-encrypted-connections-server-side-runtime-configuration).

    下面的示例显示了`我的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
```

重要的

这个[`改变实例重新加载TLS`](alter-instance.html#alter-instance-reload-tls)语句根据定义上下文的系统变量的当前值重新配置服务器的TLS上下文，在组复制运行时不会更改组复制的组通信连接的TLS上下文。要将重新配置应用于这些连接，必须执行[`停止组复制`](stop-group-replication.html)然后[`启动组复制`](start-group-replication.html)重新启动组复制。

上述选项不包括加入成员和现有成员之间进行的分布式恢复连接。这些连接使用组复制的专用分布式恢复SSL选项，如中所述[第18.6.3.2节，“分布式恢复的安全套接字层（SSL）连接”](group-replication-configuring-ssl-for-recovery.html).

**使用MySQL通信堆栈时(`组\复制\通信\堆栈=MYSQL`):**组的分布式恢复的安全设置应用于组成员之间的正常通信。看见[第18.6.3节，“保护分布式恢复连接”](group-replication-distributed-recovery-securing.html)关于如何配置安全设置。
