MySQL5.7配置SSL加密


PS:本文整理自https://www.cnblogs.com/imweihao/p/7199547.html

本文內容還未經過只是簡單操作了一下,后續再回來完善

(一)SSL介紹
SSL(Secure Socket Layer:安全套接字層)利用數據加密、身份驗證和消息完整性驗證機制,為基於TCP等可靠連接的應用層協議提供安全性保證。
SSL協議提供的功能主要有:
           1、數據傳輸的機密性:利用對稱密鑰算法對傳輸的數據進行加密。
           2.、身份驗證機制:基於證書利用數字簽名方法對服務器和客戶端進行身份驗證,其中客戶端的身份驗證是可選的。
           3、消息完整性驗證:消息傳輸過程中使用MAC算法來檢驗消息的完整性。
如果用戶的傳輸不是通過SSL的方式,那么其在網絡中數據都是以明文進行傳輸的,而這給別有用心的人帶來了可乘之機。所以,現在很多大型網站都開啟了SSL功能。同樣地,在我們數據庫方面,如果客戶端連接服務器獲取數據不是使用SSL連接,那么在傳輸過程中,數據就有可能被竊取。
(二)MySQL5.7配置SSL

1.查看MySQL是否開啟SSL
如果have_ssl為DISABLED,說明未開啟

mysql> show variables like "%ssl%";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | DISABLED        |
| have_ssl      | DISABLED        |
| 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.00 sec)

2.啟用SSL

systemctl stop mysqld

mysql_ssl_rsa_setup

在mysql的數據目錄下(可以再my.cnf里查看datadir數據目錄路徑,我的在以下路徑/data/mysql/data)

然后將該目錄下所有的pem文件屬主修改為mysql

systemctl start mysqld

mysql> show variables like "%have_ssl%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

3.配置SSL

修改my.cnf文件,在mysql和mysqld模塊下添加以下內容

ssl-ca=/data/mysql/data/ca.pem
ssl-cert=/data/mysql/data/client-cert.pem
ssl-key=/data/mysql/data/client-key.pem

systemctl restart mysqld

登錄查看mysql狀態,確認是否開啟ssl

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.15, for linux-glibc2.5 (x86_64) using  EditLine wrapper

Connection id:        2
Current database:    
Current user:        root@localhost
SSL:            Cipher in use is DHE-RSA-AES256-SHA    #這里有對應的算法名稱,說明該連接啟用了ssl
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.7.15-log MySQL Community Server (GPL)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    gbk
Db     characterset:    gbk
Client characterset:    gbk
Conn.  characterset:    gbk
UNIX socket:        /data/mysql/run/mysql.sock
Uptime:            38 sec

Threads: 1  Questions: 6  Slow queries: 0  Opens: 108  Flush tables: 1  Open tables: 101  Queries per second avg: 0.157
--------------

mysql> 

也可以通過執行show status like 'ssl_cipher';

mysql>  show status like 'ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+--------------------+
1 row in set (0.01 sec)

mysql> 

 配置用戶啟用SSL
#修改已存在用戶
mysql> ALTER USER 'dba'@'%' REQUIRE SSL;
#新建必須使用SSL用戶
mysql> grant select on *.* to 'dba'@'%' identified by 'xxx' REQUIRE SSL;
則遠程登錄命令如下:
 mysql -h 10.126.xxx.xxx -u dba -p --ssl
不使用SSL的話,可能會被人通過例如tshark等工具進行抓包獲取數據
開啟SSL后,數據庫QPS平均降低了23%左右,相對還是比較影響性能的。從SSL實現方式來看,建立連接時需要進行握手、加密、解密等操作。所以耗時基本都在建立連接階段,這對於使用短鏈接的應用程序可能產生更大的性能損耗,比如采用PHP開發。不過如果使用連接池或者長連接可能會好許多。
總結
1、MySQL5.7默認是開啟SSL連接,如果強制用戶使用SSL連接,那么應用程序的配置也需要明確指定SSL相關參數,否則程序會報錯。
2、雖然SSL方式使得安全性提高了,但是相對地使得QPS也降低23%左右。所以要謹慎選擇:
      2.1、對於非常敏感核心的數據,或者QPS本來就不高的核心數據,可以采用SSL方式保障數據安全性;
      2.2、對於采用短鏈接、要求高性能的應用,或者不產生核心敏感數據的應用,性能和可用性才是首要,建議不要采用SSL方式;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM