我們開(kāi)通RDS數(shù)據(jù)庫(kù)服務(wù)后,客戶端訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)時(shí)喊暖,為了防止數(shù)據(jù)被竊取惫企,通常會(huì)采用ssl方式連接數(shù)據(jù)庫(kù)。
01 什么是SSL哄啄?
SSL(Secure Socket Layer:安全套接字層)利用數(shù)據(jù)加密雅任、身份驗(yàn)證和消息完整性驗(yàn)證機(jī)制,為基于TCP等可靠連接的應(yīng)用層協(xié)議提供安全性保證咨跌。
SSL協(xié)議提供的功能主要有:
1沪么、 數(shù)據(jù)傳輸?shù)臋C(jī)密性:利用對(duì)稱密鑰算法對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,確保數(shù)據(jù)在網(wǎng)絡(luò)上之傳輸過(guò)程中不會(huì)被截取及竊聽(tīng)锌半。
2禽车、身份驗(yàn)證機(jī)制:基于證書(shū)利用數(shù)字簽名方法對(duì)服務(wù)器和客戶端進(jìn)行身份驗(yàn)證,其中客戶端的身份驗(yàn)證是可選的刊殉。
3殉摔、消息完整性驗(yàn)證:消息傳輸過(guò)程中使用MAC算法來(lái)檢驗(yàn)消息的完整性。
02 為何要用SSL連接到RDS數(shù)據(jù)庫(kù)服務(wù)记焊?
如果用戶的傳輸不是通過(guò)SSL的方式逸月,那么其在網(wǎng)絡(luò)中數(shù)據(jù)都是以明文進(jìn)行傳輸?shù)模@給別有用心的人帶來(lái)了可乘之機(jī)遍膜。所以碗硬,現(xiàn)在很多大型網(wǎng)站都開(kāi)啟了SSL功能。同樣地瓢颅,在我們數(shù)據(jù)庫(kù)方面恩尾,如果客戶端連接服務(wù)器獲取數(shù)據(jù)不是使用SSL連接,那么在傳輸過(guò)程中挽懦,數(shù)據(jù)就有可能被竊取翰意。
03 測(cè)試環(huán)境準(zhǔn)備
以MySQL數(shù)據(jù)庫(kù)服務(wù)為例,在天翼云或者華為云門戶開(kāi)通MySQL數(shù)據(jù)庫(kù)服務(wù)和帶公網(wǎng)ip的ECS主機(jī)信柿,關(guān)于ECS通過(guò)內(nèi)網(wǎng)如何訪問(wèn)RDS服務(wù)冀偶,參考之前發(fā)的文章:“通過(guò)ECS內(nèi)網(wǎng)訪問(wèn)MySQL數(shù)據(jù)庫(kù)服務(wù)”極簡(jiǎn)教程.
天翼云默認(rèn)MySQL服務(wù)器端打開(kāi)SSL開(kāi)關(guān),用戶使用客戶端連接時(shí)渔嚷,可根據(jù)需要是否使用SSL連接进鸠。
1、登錄到mysql數(shù)據(jù)庫(kù):
mysql -h 192.168.0.143 -P 3306 -u root -pTest@1234
2圃伶、查詢ssl開(kāi)關(guān)是否打開(kāi):
MySQL [(none)]> show global variables like '%ssl%';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /CA/ca.pem |
| ssl_capath | |
| ssl_cert | /CA/server.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /CA/server.key |
+---------------+----------------+
9 rows in set (0.01 sec)
have_ssl參數(shù)為YES,表示ssl開(kāi)關(guān)是打開(kāi)的狀態(tài)。
接下來(lái)我們對(duì)不使用SSL(普通連接)和使用SSL兩種情況來(lái)分別闡述窒朋。
04 普通連接
1搀罢、采用非ssl方式連接到mysql數(shù)據(jù)庫(kù):
mysql -h 192.168.0.143 -P 3306 -u root -pTest@1234
2、查詢數(shù)據(jù)庫(kù)的狀態(tài):
MySQL [(none)]> \s
--------------
mysql Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 3777
Current database:
Current user: root@192.168.0.199
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MySQL
Server version: 5.7.23-3-log MySQL Community Server - (GPL)
Protocol version: 10
Connection: 192.168.0.143 via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 1 hour 15 min 55 sec
SSL: Not in use 表示此時(shí)的連接為非ssl方式侥猩。
不使用SSL的連接榔至,會(huì)比較容易地通過(guò)網(wǎng)絡(luò)抓包工具獲取數(shù)據(jù),導(dǎo)致數(shù)據(jù)泄密欺劳。
05 使用SSL連接
1. 登錄云數(shù)據(jù)庫(kù)MySQL唧取。
2. 下載SSL根證書(shū)
在“實(shí)例管理”頁(yè)面,單擊實(shí)例名稱進(jìn)入“基本信息”頁(yè)面划提,單擊“實(shí)例信息”模塊“SSL”處的枫弟,下載并解壓根證書(shū)。
3. 上傳SSL根證書(shū)
登錄到ecs上鹏往,把解壓的證書(shū)ca.pem上傳到ecs的某個(gè)目錄下淡诗,比如/home目錄。
4. 基于SSL的連接
在/home目錄下執(zhí)行指定ssl證書(shū)的mysql連接:
mysql -h 192.168.0.143 -P 3306 -u root -pTest@1234 --ssl-ca=ca.pem
這里 --ssl-ca= 是ssl證書(shū)參數(shù)伊履,后面是ssl證書(shū)文件名韩容,該文件需放在執(zhí)行該命令的路徑下。
登錄成功后唐瀑,查詢mysql當(dāng)前登錄狀態(tài):
MySQL [(none)]> \s
--------------
mysql Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 4187
Current database:
Current user: root@192.168.0.199
SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MySQL
Server version: 5.7.23-3-log MySQL Community Server - (GPL)
Protocol version: 10
Connection: 192.168.0.143 via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 1 hour 24 min 14 sec
其中SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384表示該用戶是采用SSL連接到mysql服務(wù)器上的群凶。
06 SSL性能損耗
網(wǎng)上找了有關(guān)mysql開(kāi)啟ssl后的性能測(cè)試數(shù)據(jù),開(kāi)啟SSL后哄辣,數(shù)據(jù)庫(kù)QPS平均降低了 23% 左右请梢,相對(duì)還是比較影響性能的。從SSL實(shí)現(xiàn)方式來(lái)看柔滔,建立連接時(shí)需要進(jìn)行握手溢陪、加密、解密等操作睛廊。所以耗時(shí)基本都在建立連接階段形真,這對(duì)于使用短鏈接的應(yīng)用程序可能產(chǎn)生更大的性能損耗,比如采用PHP開(kāi)發(fā)超全。不過(guò)如果使用連接池或者長(zhǎng)連接可能會(huì)好許多咆霜,建議:
1、對(duì)于非常敏感核心的數(shù)據(jù)嘶朱,或者QPS本來(lái)就不高的核心數(shù)據(jù)蛾坯,可以采用SSL方式保障數(shù)據(jù)安全性;
2疏遏、對(duì)于采用短鏈接脉课、要求高性能的應(yīng)用救军,或者不產(chǎn)生核心敏感數(shù)據(jù)的應(yīng)用,性能和可用性才是首要倘零,建議不采用SSL方式唱遭。
術(shù)語(yǔ):QPS每秒查詢率(Query Per Second)
每秒查詢率QPS是對(duì)一個(gè)特定的查詢服務(wù)器在規(guī)定時(shí)間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn),在因特網(wǎng)上呈驶,作為域名系統(tǒng)服務(wù)器的機(jī)器的性能經(jīng)常用每秒查詢率來(lái)衡量拷泽。對(duì)應(yīng)fetches/sec,即每秒的響應(yīng)請(qǐng)求數(shù)袖瞻,也即是最大吞吐能力司致。
作者:老劉論道
簡(jiǎn)介:二十年IT從業(yè)經(jīng)驗(yàn),七年云計(jì)算架構(gòu)師
技能:資深培訓(xùn)師/項(xiàng)目管理師/云計(jì)算架構(gòu)師/數(shù)據(jù)庫(kù)達(dá)人