《你的MySQL服務器開啟SSL了嗎?》要點:
本文介紹了你的MySQL服務器開啟SSL了嗎?,希望對您有用。如果有疑問,可以聯系我們。
作者介紹
趙海亮,現任職于58趕集集團-安居客MySQL DBA,主要從事安居客MySQL數據庫的優化、升級、遷移等工作.
最近,準備升級一組MySQL到5.7版本,在安裝完MySQL5.7后,在其data目錄下發現多了很多.pem類型的文件,然后通過查閱相關資料,才知這些文件是MySQL5.7使用SSL加密連接的.本篇主要介紹如何使用MySQL5.7 SSL連接加密功能以及使用SSL的一些注意點.
我們知道,MySQL5.7之前版本,安全性做得并不夠好,比如安裝時生成的Root空密碼賬號、存在任何用戶都能連接上的test庫等,導致數據庫存在較大的安全隱患.好在5.7版本對以上問題進行了一一修復.與此同時,MySQL 5.7版本還提供了更為簡單SSL安全訪問配置,且默認連接就采用SSL的加密方式,這讓數據庫的安全性提高一個層次.
SSL(Secure Socket Layer:安全套接字層)利用數據加密、身份驗證和消息完整性驗證機制,為基于TCP等可靠連接的應用層協議提供安全性保證.
SSL協議提供的功能主要有:
如果用戶的傳輸不是通過SSL的方式,那么其在網絡中數據都是以明文進行傳輸的,而這給別有用心的人帶來了可乘之機.所以,現在很多大型網站都開啟了SSL功能.同樣地,在我們數據庫方面,如果客戶端連接服務器獲取數據不是使用SSL連接,那么在傳輸過程中,數據就有可能被竊取.
在MySQL5.7安裝初始化階段,我們發現這個版本比之前版本多了一步操作,而這個操作就是安裝SSL的.
當運行完這個命令后,默認會在data_dir目錄下生成以下pem文件,這些文件就是用于啟用SSL功能的:
這時從數據庫服務器本地進入MySQL命令行,你可以看到如下變量值:
注意:如果用戶是采用本地localhost或者sock連接數據庫,那么不會使用SSL方式了.
對于上面強制使用SSL連接的用戶,如果不是使用ssl連接的就會報錯,像下面這樣:
測試方式:在MySQL服務器端通過tshark抓包的方式來模擬竊取數據.驗證、對比未使用SSL和使用SSL兩者在安全性上有什么不同?
在客戶端機器上連接數據庫并進行insert操作,使用–ssl-mode=DISABLED關閉SSL.
同時在MySQL服務器端上用tshark進行抓包:
結論:未使用SSL情況下,在數據庫服務器端可以通過抓包的方式獲取數據,安全性不高.
在客戶端機器上連接數據庫并進行insert操作,使用–ssl-mode=REQUIRED指定SSL
同時在MySQL服務器端上再次用tshark進行抓包:
【結論】沒有抓到該語句,采用SSL加密后,tshark抓不到數據,安全性高.
服務器配置:
CPU:32核心
內存:128G
磁盤:SSD
為了盡量準確測試QPS,采用全內存查詢.因為我們線上熱點數據基本都在內存中;按照并發線程數分類:1線程、4線程、8線程、16線程、24線程、32線程、64線程;
具體數據如下:
從測試數據可以發現,開啟SSL后,數據庫QPS平均降低了23%左右,相對還是比較影響性能的.從SSL實現方式來看,建立連接時需要進行握手、加密、解密等操作.所以耗時基本都在建立連接階段,這對于使用短鏈接的應用程序可能產生更大的性能損耗,比如采用PHP開發.不過果使用連接池或者長連接可能會好許多.
文章來自微信公眾號:DBAplus社群
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/2201.html