1. 程式人生 > 資料庫 >MySQL配置SSL主從複製

MySQL配置SSL主從複製

MySQL5.6 建立SSL檔案方法

官方文件:https://dev.mysql.com/doc/refman/5.6/en/creating-ssl-files-using-openssl.html#creating-ssl-files-using-openssl-unix-command-line

Create clean environment

mkdir /home/mysql/mysqlcerts && cd /home/mysql/mysqlcerts

Create CA certificate

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

Create server certificate,remove passphrase,and sign it

server-cert.pem = public key,server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Create client certificate,and sign it

client-cert.pem = public key,client-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
server-cert.pem: OK
client-cert.pem: OK

MySQL5.7 建立SSL檔案方法

官方文件:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html

mkdir -p /home/mysql/mysqlcerts
/usr/local/mysql-5.7.21-linux-glibc2.12-x86_64/bin/mysql_ssl_rsa_setup --datadir=/home/mysql/mysqlcerts/

主庫建立SSL後進行配置

從庫 192.168.1.222

mkdir -p /home/mysql/mysqlcerts

主庫

chown -R mysql.mysql /home/mysql/mysqlcerts/
scp ca.pem client-cert.pem client-key.pem [email protected]:/home/mysql/mysqlcerts/

主庫授權

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.222' identified by '' require ssl;

主庫 my.cnf

#SSL
ssl-ca=/home/mysql/mysqlcerts/ca.pem
ssl-cert=/home/mysql/mysqlcerts/server-cert.pem
ssl-key=/home/mysql/mysqlcerts/server-key.pem

restart mysql

從庫

chown -R mysql.mysql /home/mysql/mysqlcerts/

my.cnf

ssl-ca=/home/mysql/mysqlcerts/ca.pem
ssl-cert= /home/mysql/mysqlcerts/client-cert.pem
ssl-key= /home/mysql/mysqlcerts/client-key.pem

建立複製:

change master to master_host='',master_user='',master_password='',master_log_file='mysql-bin.000001',master_log_pos=154,master_ssl=1,master_ssl_ca='/home/mysql/mysqlcerts/ca.pem',master_ssl_cert='/home/mysql/mysqlcerts/client-cert.pem',master_ssl_key='/home/mysql/mysqlcerts/client-key.pem',MASTER_CONNECT_RETRY=10;

驗證:
主庫配置SSL認證後,客戶端預設以SSL方式登入

mysql -utest -h192.168.1.223 -ptest -P3307

(該賬號不論是否配置require ssl 均能登入)

不以SSL方式登入命令為:

mysql -utest -h192.168.1.223 -ptest -P3307 --ssl-mode=DISABLED

(如該賬號配置了require ssl 則無法登入)