基于 SSL 复制
在默认的主从复制过程或远程连接到 MySQL/MariaDB所有的链接通信中的数据都是文明的,外网里访问数据或者复制,存在安全隐患。通过 SSL/TLS 加密的方式进行复制的方法,来进一步提高数据的安全性
配置实现:
参看:https://mariadb.com/kb/en/library/replication-with-secure-connections/
- 主服务器开启 SSL:
[mysqld] 加一行 ssl - 主服务器配置证书和私钥;并且创建一个要求必须使用 SSL 连接的复制账号
- 从服务器使用 CHANGE MASTER TO 命令时指明 ssl 相关选项
步骤
搭建CA
my.cnf.d/ssl]# openssl genrsa 2048 > cakey.pem
my.cnf.d/ssl]# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
给 master 一次性生成私钥文件和证书申请文件,并且CA进行签名:
my.cnf.d/ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
my.cnf.d/ssl]# openssl -req x509 -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
给 slave 一次性生成私钥文件和证书申请文件,并且CA进行签名:
my.cnf.d/ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
my.cnf.d/ssl]# openssl -req x509 -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt
验证证书:
my.cnf.d/ssl]# openssl verify -CAfile cacert.pem master.crt slave.crt
分别复制相应文件给主和从服务器
- 主服务器:
cacert.pem
master.key
master.crt - 从服务器:
cacert.pem
slave.key
slave.crt
在 Master 服务器上配置
[mysqld]
log_bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
# 创建加密账号
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.30.%' IDENTIFIED BY 'centos' REQUIRE ssl;
在 Slave 服务器上配置
- 方法1:
~]# vim /etc/my.cnf [mysqld] server_id=2 ssl ssl-ca=/etc/my.cnf.d/ssl/cacert.pem ssl-cert=/etc/my.cnf.d/ssl/slave.crt ssl-key=/etc/my.cnf.d/ssl/slave.key
- 方法2:
mysql> CHANGE MASTER TO MASTER_HOST='MASTERIP', MASTER_USER='rep', MASTER_PASSWORD='centos', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG-POS=245, MASTER_SSL=1, MASTER_SSL_CA='/etc/my.cnf.d/ssl/cacert.pem', MASTER_SSL_CERT='/etc/my.cnf.d/ssl/slave.crt', MASTER_SSL_KEY='/etc/my.cnf.d/ssl/slave.key'; ~]# vim /etc/my.cnf [mysqld] server_id=2 ssl