標籤:網路連接 加密 mysql 通訊
1.SSL含義
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通訊提供安全及資料完整性的一種安全性通訊協定。TLS與SSL在傳輸層對網路連接進行加密。
2.mysql5.7SSL配置和使用
注意:這種方法只使用5.7,mysql5.6也支援ssl加密串連,但是配置過程比較複雜,需要用到openssl命令來建立各類共秘鑰。
我的測試環境預設沒有啟用SSL,狀態為disabled
mysql> show variables like ‘%ssl%‘;
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
可以通過執行命令mysql_ssl_rsa_setup建立pem檔案:
[[email protected] ~]# cd /usr/local/mysql/bin/
[[email protected] bin]# ./mysql_ssl_rsa_setup
Generating a 2048 bit RSA private key
.................................................................................................+++
................................+++
writing new private key to ‘ca-key.pem‘
-----
Generating a 2048 bit RSA private key
......................................+++
.+++
writing new private key to ‘server-key.pem‘
-----
Generating a 2048 bit RSA private key
........................................................................................................................................+++
......+++
writing new private key to ‘client-key.pem‘
-----
運行完命令mysql_ssl_rsa_setup後會探索資料目錄下多出了一些以pem結尾的檔案,而這些檔案就是開啟SSL串連所需要的檔案:
[[email protected] data]# ll *.pem
-rw------- 1 root root 1679 Nov 26 05:56 ca-key.pem
-rw-r--r-- 1 root root 1074 Nov 26 05:56 ca.pem
-rw-r--r-- 1 root root 1078 Nov 26 05:56 client-cert.pem
-rw------- 1 root root 1679 Nov 26 05:56 client-key.pem
-rw------- 1 root root 1679 Nov 26 05:56 private_key.pem
-rw-r--r-- 1 root root 451 Nov 26 05:56 public_key.pem
-rw-r--r-- 1 root root 1078 Nov 26 05:56 server-cert.pem
-rw------- 1 root root 1675 Nov 26 05:56 server-key.pem
新建立的檔案屬於root使用者,需要改變所有者和所屬組,然後重啟服務:
[[email protected] data]# chown -R mysql:mysql data/
[[email protected] ~]# /etc/init.d/mysqld restart
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 |
+---------------+-----------------+
指定IP,通過網路登陸測試:
[[email protected] ~]# mysql -uroot -p147258 -h192.168.91.5
mysql>\s
--------------
mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper
Connection id: 10
Current database:
Current user: [email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA
......
本地用戶端登陸,沒指定IP,預設是不需要SSL加密:
[[email protected] ~]# mysql -uroot -p147258 -hlocalhost
mysql>\s
--------------
mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper
Connection id: 12
Current database:
Current user: [email protected]
SSL: Not in use
......
mysql5.7使用者串連預設是使用ssl加密的,也可以用--ssl=0(mysql5.7也可以用--ssl-mode=dibaled)強制使用者不使用ssl加密:
[[email protected] ~]# mysql -ucdhu4 -p147258 -h192.168.91.5 --ssl=0
或者:
[[email protected] ~]# mysql -ucdhu4 -p147258 -h192.168.91.5 --ssl-mode=disabled
mysql>\s
--------------
mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper
Connection id: 18
Current database:
Current user: [email protected]
SSL: Not in use
......
若在建立使用者時,希望該使用者每次必須通過SSL方式,則需在通過REQUIRE SSL來進行設定:
mysql>alter user [email protected]‘%‘ require ssl;
此時指定ssl=0(或者ssl_mode=disabled)則會報錯1045:
[[email protected] ~]# mysql -ucdhu5 -p147258 -h192.168.91.5 --ssl=0
ERROR 1045 (28000): Access denied for user ‘cdhu5‘@‘Darren1‘ (using password: YES)
3.ssl加密串連對效能的影響
開啟ssl加密串連是效能必然會下降,效能開銷在25%左右, 另外,由於SSL開銷較大的環節在建立串連,所以短連結的開銷可能會更大,因此推薦使用長串連或者串連池的方式來減小SSL所帶來的額外開銷,不過好在MySQL的應用習慣大部分也是長串連的方式。
本文出自 “10979687” 部落格,請務必保留此出處http://10989687.blog.51cto.com/10979687/1878716
mysql 加密串連SSL