1. 程式人生 > >mysql ssl連結 配置

mysql ssl連結 配置

cmake使用了預設的選項 -DWITH_SSL=bundled,中間參考了兩位博友的文章,表示感謝!
參考:https://www.jb51.net/article/100432.htm 建立證書過程
參考:https://blog.csdn.net/nicajonh/article/details/52311402 root使用者新增grand過程

一、建立證書的過程
1、生成一個 CA 私鑰
openssl genrsa 2048 > ca-key.pem
2、通過 CA 私鑰生成數字證書
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
3、 建立伺服器端的 RSA 私鑰和數字證書
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
4、 將生成的私鑰轉換為 RSA 私鑰檔案格式
openssl rsa -in server-key.pem -out server-key.pem
5、用CA 證書來生成一個伺服器端的數字證書
openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
6、建立客戶端的 RSA 私鑰和數字證書
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem
7、將生成的私鑰轉換為 RSA 私鑰檔案格式
openssl rsa -in client-key.pem -out client-key.pem
8、用CA 證書來生成一個客戶端的數字證書
openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
9、檢視所有生成的SSL檔案
-rw-r–r-- 1 root root 1675 Jun 24 14:16 ca-key.pem
-rw-r–r-- 1 root root 1220 Jun 24 14:19 ca.pem
-rw-r–r-- 1 root root 1090 Jun 24 14:29 client-cert.pem
-rw-r–r-- 1 root root 1679 Jun 24 14:28 client-key.pem
-rw-r–r-- 1 root root 952 Jun 24 14:28 client-req.pem
-rw-r–r-- 1 root root 1090 Jun 24 14:24 server-cert.pem
-rw-r–r-- 1 root root 1679 Jun 24 14:23 server-key.pem
-rw-r–r-- 1 root root 952 Jun 24 14:20 server-req.pem
10、將server需要的證書放到/root/ca目錄下(ca-cert.pem、server-cert.pem、/server-key.pem)

11、注意事項:
MySQL在生成上面證書的時候需要輸入大量使用者資訊,在CA上建立證書要注意所有的使用者資訊要和CA中的一致,從國家到部門都要相同,否則會造成證書無法使用,直接全部預設回車即可。
要是使用者資訊一樣則MariaDB會報錯:
MariaDB在生成上面證書的時候也是需要輸入大量使用者資訊,和MySQL不同的是輸入的使用者資訊服務端和客戶端不能一致。即服務端輸入和客戶端輸入不一樣。
具體原因見這裡https://mariadb.com/kb/en/library/mariadb-ssl-connection-issues/,
最後可以通過驗證ca證書內容:openssl verify -CAfile /root/ca/ca-cert.pem /root/ca/server-cert.pem /root/ca/client-cert.pem
二、mysqld啟動配置
[mysqld]
# ssl connection configuration
ssl
ssl-ca=/root/ca/ca-cert.pem
ssl-cert=/root/ca/server-cert.pem
ssl-key=/root/ca/server-key.pem

三、重啟mysql服務
/etc/init.d/mysqld restart
確認have_openssl和have_ssl 為yes。
mysql的root登陸,輸入如下內容,驗證顯示內容。
mysql> show variables like ‘%ssl%’;
±--------------±----------------+
| Variable_name | Value |
±--------------±----------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | server-key.pem |
±--------------±----------------+
9 rows in set (0.01 sec)

四、建立測試使用者
1、給root使用者增加grant許可權:
+關閉mysql原來的服務,通過如下命令開啟mysql服務
/usr/bin/mysqld_safe --skip-grant-tables
+ 登陸mysql
mysql -u root
+授權
grant all privileges on . to ‘root’@‘localhost’ identified by ‘root’ with grant option;
出現錯誤,沒有寫許可權,按照如下方法處理
mysql> set global read_only=0;//(關掉新主庫的只讀屬性)
mysql>flush privileges;
grant all privileges on . to ‘root’@‘localhost’ identified by ‘root’ with grant option;#再次重新授權
mysql>set global read_only=1;//(讀寫屬性)
mysql>flush privileges;
mysql>exit;

2、建立測試使用者
建立ssl_test使用者,需要ssl連結
GRANT ALL PRIVILEGES ON . TO ‘ssl_test’@’%’ IDENTIFIED BY ‘ssl_test’ REQUIRE SSL;
FLUSH PRIVILEGES;

五、測試連結過程:
測試過程中因為client的證書放在了/root/ca目錄下(ca-cert.client-cert.pem、/client-key.pem),所以如下命令列中,路徑為/root/ca/開頭
mysql --ssl-ca=/root/ca/ca-cert.pem --ssl-cert=/root/ca/client-cert.pem --ssl-key=/root/ca/client-key.pem -h 10.10.5.159 -u ssl_test -p
六、Qt連結mysql ssl方法
通過 QSqlDatabase::setConnectOptions方法設定ssl的引數,如下程式碼所示:
db.setConnectOptions(“SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1”); // use an SSL connection to the server