要使用加密连接传输复制过程中所需的二进制日志,源服务器和副本服务器都必须支持加密网络连接。如果任一服务器不支持加密连接(因为没有为此编译或配置),则无法通过加密连接进行复制。
设置复制的加密连接类似于为客户端/服务器连接设置加密连接。您必须获取(或创建)适合在源服务器上使用的安全证书,以及在每个副本上使用的类似证书(来自同一证书颁发机构)。您还必须获取合适的密钥文件。
有关为加密连接设置服务器和客户端的更多信息,请参阅 第 8.3.1 节,“配置 MySQL 以使用加密连接”.
要启用源服务器上的加密连接,您必须创建或获取合适的证书和密钥文件,然后将以下配置参数添加到源 my.cnf
文件的 [mysqld]
部分,并根据需要更改文件名
[mysqld]
ssl_ca=cacert.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
文件路径可以是相对路径或绝对路径;我们建议始终使用完整路径。
配置参数如下
ssl_ca
: 证书颁发机构 (CA) 证书文件的路径名。(ssl_capath
类似,但指定 CA 证书文件目录的路径名。)ssl_cert
: 服务器公钥证书文件的路径名。此证书可以发送到客户端并根据其拥有的 CA 证书进行身份验证。ssl_key
: 服务器私钥文件的路径名。
要启用副本上的加密连接,请使用 CHANGE REPLICATION SOURCE TO
语句。
要使用
CHANGE REPLICATION SOURCE TO
命名副本的证书和 SSL 私钥文件,请添加适当的SOURCE_SSL_
选项,如下所示xxx
-> SOURCE_SSL_CA = 'ca_file_name', -> SOURCE_SSL_CAPATH = 'ca_directory_name', -> SOURCE_SSL_CERT = 'cert_file_name', -> SOURCE_SSL_KEY = 'key_file_name',
这些选项对应于具有相同名称的
--ssl-
选项,如 加密连接的命令选项 中所述。为了使这些选项生效,还必须设置xxx
SOURCE_SSL=1
。对于复制连接,为SOURCE_SSL_CA
或SOURCE_SSL_CAPATH
中的任何一个指定值对应于设置--ssl-mode=VERIFY_CA
。只有在使用指定的信息找到有效的匹配证书颁发机构 (CA) 证书时,连接尝试才会成功。要激活主机名身份验证,请添加
SOURCE_SSL_VERIFY_SERVER_CERT
选项,如下所示-> SOURCE_SSL_VERIFY_SERVER_CERT=1,
对于复制连接,指定
SOURCE_SSL_VERIFY_SERVER_CERT=1
等同于设置--ssl-mode=VERIFY_IDENTITY
,如 加密连接的命令选项 中所述。为了使此选项生效,还必须设置SOURCE_SSL=1
。主机名身份验证不适用于自签名证书。要激活证书吊销列表 (CRL) 检查,请添加
SOURCE_SSL_CRL
或SOURCE_SSL_CRLPATH
选项,如下所示-> SOURCE_SSL_CRL = 'crl_file_name', -> SOURCE_SSL_CRLPATH = 'crl_directory_name',
这些选项对应于具有相同名称的
--ssl-
选项,如 加密连接的命令选项 中所述。如果未指定它们,则不会进行 CRL 检查。xxx
要指定副本在复制连接中允许的密码、密码套件和加密协议列表,请使用
SOURCE_SSL_CIPHER
、SOURCE_TLS_VERSION
和SOURCE_TLS_CIPHERSUITES
选项,如下所示-> SOURCE_SSL_CIPHER = 'cipher_list', -> SOURCE_TLS_VERSION = 'protocol_list', -> SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list',
The
SOURCE_SSL_CIPHER
option specifies a colon-separated list of one or more ciphers permitted by the replica for the replication connection.The
SOURCE_TLS_VERSION
option specifies a comma-separated list of the TLS encryption protocols permitted by the replica for the replication connection, in a format like that for thetls_version
server system variable. The connection procedure negotiates the use of the highest TLS version that both the source and the replica permit. To be able to connect, the replica must have at least one TLS version in common with the source.The
SOURCE_TLS_CIPHERSUITES
option specifies a colon-separated list of one or more ciphersuites that are permitted by the replica for the replication connection if TLSv1.3 is used for the connection. If this option is set toNULL
when TLSv1.3 is used (which is the default if you do not set the option), the ciphersuites that are enabled by default are allowed. If you set the option to an empty string, no cipher suites are allowed, and TLSv1.3 is therefore not used.
您可以指定这些列表中的协议、密码和密码套件取决于用于编译 MySQL 的 SSL 库。有关格式、允许的值以及未指定选项时的默认值的信息,请参见 第 8.3.2 节,“加密连接 TLS 协议和密码”。
注意您可以使用
SOURCE_TLS_CIPHERSUITES
选项来指定任何密码套件选择,包括仅非默认密码套件(如果您需要)。在更新源信息后,请在副本上启动复制过程,如下所示
mysql> START REPLICA;
您可以使用
SHOW REPLICA STATUS
语句确认是否已成功建立加密连接。在副本上要求加密连接并不能保证源要求来自副本的加密连接。如果您希望确保源只接受使用加密连接连接的副本,请使用
REQUIRE SSL
选项在源上创建一个复制用户帐户,然后授予该用户REPLICATION SLAVE
权限。例如mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password' -> REQUIRE SSL; mysql> GRANT REPLICATION SLAVE ON *.* -> TO 'repl'@'%.example.com';
如果您在源上已经拥有现有的复制用户帐户,您可以使用以下语句向其中添加
REQUIRE SSL
mysql> ALTER USER 'repl'@'%.example.com' REQUIRE SSL;