1. 程式人生 > >Mysql 5.7.18 加密連接mysql_ssl_rsa_setup 安裝 mysql證書登陸

Mysql 5.7.18 加密連接mysql_ssl_rsa_setup 安裝 mysql證書登陸

nec 文件 利用 ls -l code 就會 比較 熱點 var

MySQL 5.7.18 下載地址: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

安裝步驟:http://www.cnblogs.com/imweihao/p/7196516.html

轉自:http://www.cnblogs.com/mysql-dba/p/7061300.html

   http://blog.csdn.net/tanweii163/article/details/50102769

一、SSL介紹

SSL(Secure Socket Layer:安全套接字層)利用數據加密、身份驗證和消息完整性驗證機制,為基於TCP等可靠連接的應用層協議提供安全性保證。

SSL協議提供的功能主要有:

1、數據傳輸的機密性:利用對稱密鑰算法對傳輸的數據進行加密。
2.、身份驗證機制:基於證書利用數字簽名方法對服務器和客戶端進行身份驗證,其中客戶端的身份驗證是可選的。
3、消息完整性驗證:消息傳輸過程中使用MAC算法來檢驗消息的完整性。

如果用戶的傳輸不是通過SSL的方式,那麽其在網絡中數據都是以明文進行傳輸的,而這給別有用心的人帶來了可乘之機。所以,現在很多大型網站都開啟了SSL功能。同樣地,在我們數據庫方面,如果客戶端連接服務器獲取數據不是使用SSL連接,那麽在傳輸過程中,數據就有可能被竊取。

二、

MySQL5.7 SSL啟用

1.登陸數據庫查看ssl是否開啟

mysql> show variables like ‘have_ssl‘;

技術分享

# have_ssl YES , 表示此時 MySQL 服務已經支持 SSL . 如果是 DESABLE, 則需要在啟動安裝mysql_ssl_rsa_setup 使其能支持SSL 功能

2.安裝mysql_ssl_rsa_setup

[[email protected] mysqldata]# service mysqld stop

[[email protected] mysql]# bin/mysql_ssl_rsa_setup

技術分享

[[email protected] mysql]# cd /data/mysqldata/

[[email protected] mysqldata]# chown -R mysql.mysql *.pem

[[email protected] mysql]# service mysqld restart

[[email protected] mysql]# cd /data/mysqldata/

[[email protected] mysqldata]# ls -lh *.pem

運行完命令mysql_ssl_rsa_setup後會發現數據目錄下多出了一些以pem結尾的文件,而這些文件就是開啟SSL連接所需要的文件

技術分享

3.啟動MySQL數據庫並查看變量是否發生改變:

mysql> show variables like ‘have_ssl‘;

技術分享

該參數表示MySQL服務器開啟了SSL功能

三、MySQL5.7 SSL配置

1.查看連接的方式,下圖表示沒有使用ssl連接

mysql> \s

技術分享

【註意】:如果用戶是采用本地localhost或者sock連接數據庫,那麽不會使用SSL方式了。

2.添加ssl參數到my.cnf配置文件

添加ssl參數到my.cnf配置文件

[mysqld]

ssl-ca=/opt/mysql01/data/ca.pem

ssl-cert=/opt/mysql01/data/client-cert.pem

ssl-key=/opt/mysql01/data/client-key.pem

[mysql]

ssl-ca=/opt/mysql01/data/ca.pem

ssl-cert=/opt/mysql01/data/client-cert.pem

ssl-key=/opt/mysql01/data/client-key.pem

3.客戶端連接

[[email protected] mysql]# bin/mysql -uroot -h 192.168.31.84 -p

最好使用遠程連接進行測試,localhost或者-S unix socket連接,這種有可能不會用ssl。

mysql> status

--------------

bin/mysql Ver 14.14 Distrib 5.7.9, for Linux (x86_64) using EditLine wrapper

Connection id: 10

Current database:

Current user: [email protected]

SSL: Cipher in use is DHE-RSA-AES256-SHA

Current pager: stdout

Using outfile: ‘‘

Using delimiter: ;

status中SSL中顯示Cipher in use,表明當前連接使用ssl

或者查看狀態Ssl_cipher也可以,Value不為空,表明客戶端連接啟用ssl

mysql> show status like ‘ssl_cipher‘;

+---------------+--------------------+

| Variable_name | Value |

+---------------+--------------------+

| Ssl_cipher | DHE-RSA-AES256-SHA |

+---------------+--------------------+

1 row in set (0.00 sec)

如果客戶不想使用ssl連接,可以在mysql連接參數中使用-ssl=0來禁用ssl連接,執行效果請自行使用status查看

mysql> bin/mysql -uroot -h 192.168.31.84 --ssl=0 -p

遠程連接結果需開啟root遠程連接,實際生產不建議使用root

mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;

mysql> flush privileges;

mysql> quit

強制某用戶必須使用SSL連接數據庫

#修改已存在用戶
mysql> ALTER USER [email protected]%‘ REQUIRE SSL;
				
#新建必須使用SSL用戶
mysql> grant select on *.* to [email protected]%‘ identified by ‘xxx‘ REQUIRE SSL;
				

#對於上面強制使用ssl連接的用戶,如果不是使用ssl連接的就會報錯,像下面這樣:

[[email protected] mysql] /usr/local/mysql/bin/mysql -udba -p -h10.126.xxx.xxx --ssl=0
				
Enter password: 
ERROR 1045 (28000): Access denied for user [email protected] (using password: YES)

四、未使用SSL和使用SSL安全性對比

【測試方式】在MySQL服務器端通過tshark抓包的方式來模擬竊取數據。驗證、對比未使用SSL和使用SSL兩者在安全性上有什麽不同?

1.未使用SSL情況:

在客戶端機器(10.126.126.161)上連接數據庫並進行insert操作,使用--ssl-mode=DISABLED關閉SSL

技術分享

同時在MySQL服務器端(10.126.126.160)上用tshark進行抓包:

技術分享

【結論】未使用SSL情況下,在數據庫服務器端可以通過抓包的方式獲取數據,安全性不高。

2.采用SSL情況:

在客戶端機器(10.126.126.161)上連接數據庫並進行insert操作,使用--ssl-mode=REQUIRED指定SSL

技術分享

同時在MySQL服務器端(10.126.126.160)上再次用tshark進行抓包:

技術分享

【結論】沒有抓到該語句,采用SSL加密後,tshark抓不到數據,安全性高。

五、使用SSL前後性能對比(QPS)

服務器配置:CPU:32核心 內存:128G 磁盤:SSD

為了盡量準確測試QPS,采用全內存查詢,因為我們線上熱點數據基本都在內存中;按照並發線程數分類:1線程、4線程、8線程、16線程、24線程、32線程、64線程;

技術分享

具體數據如下:

技術分享

從測試數據可以發現,開啟SSL後,數據庫QPS平均降低了23%左右,相對還是比較影響性能的。從SSL實現方式來看,建立連接時需要進行握手、加密、解密等操作。所以耗時基本都在建立連接階段,這對於使用短鏈接的應用程序可能產生更大的性能損耗,比如采用PHP開發。不過如果使用連接池或者長連接可能會好許多。

六、總結

1、MySQL5.7默認是開啟SSL連接,如果強制用戶使用SSL連接,那麽應用程序的配置也需要明確指定SSL相關參數,否則程序會報錯。

2、雖然SSL方式使得安全性提高了,但是相對地使得QPS也降低23%左右。所以要謹慎選擇:

2.1、對於非常敏感核心的數據,或者QPS本來就不高的核心數據,可以采用SSL方式保障數據安全性;

2.2、對於采用短鏈接、要求高性能的應用,或者不產生核心敏感數據的應用,性能和可用性才是首要,建議不要采用SSL方式;

Mysql 5.7.18 加密連接mysql_ssl_rsa_setup 安裝 mysql證書登陸