mariadb複製——加密複製

背景

本來也是一時興起打算抓包玩,但是沒想到卻在無意之間抓到了mariadb複製的明文報文。於是乎便到mysql官方文檔看看有沒有關於數據加密的信息,畢竟複製過程之接明文還是挺不安全的;在mysql的參考文檔中還真找到了加密複製的實現,下面便開始具體的實現流程。

環境

CA 192.168.99.131
Master 192.168.99.135
Slave 192.168.99.150

CA:用來給master和slave節點簽發證書
Maser:作爲主節點數據庫服務器
slave:作爲從節點數據庫服務器

整體框架圖如下:
mariadb複製——加密複製

實驗流程

CA直接生成給master和slave的證書

1.自簽署CA

#找個目錄生成
 cd /etc/my.cnf.d/ssl/

    openssl genrsa 2048 > cakey.pem
    openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650

2.生成master節點的私鑰和請求文件

    openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
    openssl x509 -req  -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt  

3.生成slave節點的私鑰和請求文件

   openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
    openssl x509 -req  -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt

4.將文件分別複製的對應的節點上

#master 
#cacert.pem master.crt master.key
 scp cacert.pem master.crt master.key 192.168.99.135:/etc/my.cnf.d/ssl/

#slave
#cacert.pem slave.crt slave.key

 scp cacert.pem slave.crt slave.key 192.168.99.150:/etc/my.cnf.d/ssl/

5.配置主節點

#編輯配置文件
vim /etc/my.cnf.d/server.cnf 
[mysqld]
#數據目錄(看個人情況)
datadir=/data/mysql
#二進制日誌文件路徑及命名(個人情況)
log_bin=/data/binlog/mysql-bin
#庫表獨立文件(看個人愛好,一般推薦分開)
innodb_file_per_table
#指定編號
server_id=1
#開啓ssl功能
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

配置完成後啓動數據庫

    systemctl start mariadb

進入數據庫,授權備份賬號僅允許加密備份查看當前的二進制日誌信息

mysql
MariaDB [(none)]> grant replication slave on *.* to slave@'192.168.99.150' identified by 'slave' require ssl;
MariaDB [(none)]>show master status;

mariadb複製——加密複製
6.配置從節點

# 編輯配置文件
vim /etc/my.cnf.d/server.cnf 

[mysqld]
datadir=/data/mysql
log_bin=/data/binlog/mysql-bin
innodb_file_per_table
# 下面是重點
# server-id唯一不能重複,其他配置與主類似
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

啓動數據庫

    systemctl start mariadb

進入數據庫設置主庫指向

mysql 
change master to \ 
master_host='192.168.99.135', 
master_user='slave', 
master_password='slave', 
master_log_file='mysql-bin.000003', 
master_log_pos=553, 
master_ssl=1;

7.啓動備份,並查看備份狀態

MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status;

mariadb複製——加密複製
8.檢驗是否實現加密

#在主數據庫進行操作,同時進行抓包檢測
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.03 sec)

MariaDB [(none)]> create database db2;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database db3;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database db4;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database db5;
Query OK, 1 row affected (0.00 sec)

# 最終驗證發現加密後確實不再有明文的複製過程的傳送,實現了數據的加密。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章