參考:
https://blog.csdn.net/johnhill_/article/details/72831932
1、查看mariadb是否支持ssl
進入mariadb shell中查看,若存在下圖中所示信息則表示支持
show global variables like "%ssl%";
2、創建自建root證書
①創建證書私鑰(ca-key.pem)
openssl genrsa 2048 > ca-key.pem
②創建root證書(ca-cert.pem)
openssl req -sha1 -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
3、創建服務端證書
①創建服務端私鑰(server-key.pem)、證書請求文件(server-req.pem)
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
②將私鑰轉換為rsa私鑰格式
openssl rsa -in client-key.pem -out client-key.pem
③生成服務端證書(server-cert.pem)
openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
(注:上圖中的Common Name在整個自建證書中需保持唯一性)
④驗證證書是否成功創建
openssl verify -CAfile ca-cert.pem server-cert.pem
出現如下圖所示則表示證書創建成功,否則檢查Common Name是否發生沖突(大部分配置失敗都是這個問題導致)
4、創建客戶端證書
①創建證書私鑰(ca-key.pem)
openssl genrsa 2048 > ca-key.pem
②創建root證書(ca-cert.pem)
openssl req -sha1 -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
4、創建客戶端證書
①創建服務端私鑰(client-key.pem)、證書請求文件(client-req.pem)
openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
②將私鑰轉換為rsa私鑰格式
openssl rsa -in client-key.pem -out client-key.pem
③生成服務端證書(server-cert.pem)
openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
④驗證證書是否成功創建
openssl verify -CAfile ca-cert.pem client-cert.pem
5、修改mariadb配置文件
①在mariadb的配置文件/etc/my.cnf中添加如下內容,后重啟服務
ssl-ca=/etc/my.cnf.d/ssl/ca-cert.pem
ssl-key=/etc/my.cnf.d/ssl/server-key.pem
ssl-cert=/etc/my.cnf.d/ssl/server-cert.pem
②查看是否啟動ssl
show global variables like '%ssl%';
6、添加ssl訪問用戶
grant all privileges on . to 'ssl_test'@'localhost' identified by 'ssl_test' require ssl;
grant all privileges on . to 'ssl_test'@'%t' identified by 'ssl_test' require ssl;
flsuh privileges;
7、驗證
mysql -u ssl_test -pssl_test --ssl-ca=/root/mariadb_ca/ca-cert.pem --ssl-cert=/root/mariadb_ca/client-cert.pem --ssl-key=/root/mariadb_ca/client-key.pem
8、其中涉及的一些原理介紹
(不一定正確僅是個人理解)
①為何要分別配置客戶端證書、服務端證書?
mariadb配置ssl,這種方式使用的是SSL雙向認證
②為何生成每個證書時都要CA證書和CA私鑰?
因為若server端向CA申請證書,需要使用CA的私鑰加密server端的公鑰,然后client端通過獲取ca證書中server的公鑰并進行驗證。同理clientr端向CA申請證書也需使用CA的私鑰加密server端的公鑰,然后server端通過獲取ca證書中的client公鑰并進行驗證,最后建立SSL連接。