多種不同的 MySQL 的 SSL 配置
在這篇博客的帖子里,我將會(huì)描述不同的使用MySQL數(shù)據(jù)庫的SSL配置方法。
SSL給了你什么?
你可以通過互聯(lián)網(wǎng)使用 MySQL 復(fù)制特性(replication) 或者通過互聯(lián)網(wǎng)連接到MySQL。
還有可能是你通過企業(yè)網(wǎng)去連接,這樣會(huì)有很多人訪問。如果你使用一個(gè)自帶設(shè)備(BYOD)網(wǎng)絡(luò),這就更是一個(gè)問題了。
SSL在這里通過加密網(wǎng)絡(luò)防止有針對(duì)性的監(jiān)聽。在與正確的服務(wù)器進(jìn)行交互時(shí),可以有效應(yīng)對(duì)中間人攻擊(man-in-the-middle attacks)。
你還可以使用SSL客戶端證書,讓它同密碼一起作為身份識(shí)別的二要素。
SSL不是唯一的選擇, 你可以使用SSH和許多MySQL GUI客戶端,類似MySQL Workbench提供的那個(gè)產(chǎn)品。 但是SSH的python腳本,或者mysqldump,不是那么易用。
需要注意的事情:
使用SSL在絕大多數(shù)情況下要比不使用SSL要好,所以沒有太多可能出現(xiàn)問題的地方。
但是以下幾點(diǎn)需要注意:
對(duì)安全性的錯(cuò)誤估計(jì)
你認(rèn)為你在SSL的保護(hù)之下,但是你可能忘記設(shè)置一些選項(xiàng)從而導(dǎo)致程序可以接受非SSL的連接,所以要確保設(shè)置必須使用SSL作為連接方式??梢允褂肳ireshark或者其它類似的工具來檢測你的流量是否都真的被加密處理。
沒有及時(shí)更新證書
你應(yīng)該通過一些方法在證書即將過期的時(shí)候通知自己??梢允莕agios檢查,可以是日歷里面的小貼士,可以來自于證書簽發(fā)機(jī)構(gòu)的email。如果證書過期,將會(huì)導(dǎo)致你的客戶端無法正常獲得響應(yīng)。
性能
如果性能很重要,就應(yīng)該做基準(zhǔn)測試,來看看沒有SSL的情況下有什么影響。在 OpenSSL 和 YaSSL 下嘗試不同的密碼,并看哪個(gè)的執(zhí)行效果最佳。
使用流量監(jiān)測的工具
如果你在使用像 VividCortex,pt-query-digest 基于 pcap 的工具,那么你應(yīng)該確保在部署完SSL后,這些工具還能用,可以提供密鑰來實(shí)現(xiàn)。然后使用一個(gè)非 Diffie-Hellman (DH)的密碼,或者使用其他的源,如 performance_schema、slow query log,這還要看你的應(yīng)用程序支持哪種,也可能會(huì)包含一些負(fù)載均衡的設(shè)置。
MySQL 中的 SSL 和瀏覽器中的 SSL 有什么不同
瀏覽器默認(rèn)有一個(gè) CA 的信任列表,但 MySQL 默認(rèn)是沒有的。這就是他們最大的不同。MySQL 和OpenVPN 使用SSL非常相似。
MySQL server 和 Web server 都開啟了 SSL,同時(shí)也都需要有客戶端證書,這是他們相同的地方。
有一些細(xì)微的協(xié)議支持差別,比如:MySQL 只支持 TLS v1.0,默認(rèn)不支持主機(jī)名驗(yàn)證,所以你的證書可能是給db1.example.com的,也可能是給db2.example的,瀏覽器則可能會(huì)用OCSP、CRL's 或 CRLsets 來驗(yàn)證證書是否有效。 MySQL 5.6以后就只支持CRL驗(yàn)證。
配置 1: Server/Client 的內(nèi)部 CA
最基本的安裝和我創(chuàng)建mysslgen的位置。
首先在服務(wù)器上創(chuàng)建一個(gè)PKCS#1格式的密鑰,若PKCS#8不行。然后創(chuàng)建一個(gè)可以用CA部署的CSR(Certificate Signing Request證書簽名請(qǐng)求) 。最后結(jié)果是一個(gè)CA證書服務(wù)器和一個(gè)服務(wù)器的密鑰。筆者習(xí)慣用PEM格式的證書
服務(wù)器配置:
SSL證書服務(wù)器和密鑰(ssl-certandssl-key)
SSL CA 證書 (ssl-ca)
客戶端配置:
SSL CA 證書(ssl-ca)
要求賬戶用SSL驗(yàn)證,那你的GRANT語句應(yīng)該用REQUIRE SSL選項(xiàng)。
配置 2: Server/Client 的內(nèi)部 CA 和 客戶端證書
首先得在服務(wù)器上開啟SSL,然后給客戶端創(chuàng)建證書。
然后在客戶端指定客戶端證書和密鑰 ssl-cert和ssl-key.
現(xiàn)在必須要用 REQUIRE X509來要求一個(gè)有效的證書。如果這個(gè)CA不只用在MySQL server上,那就不起作用了,因?yàn)槠渌艘灿锌赡苣玫接行У淖C書,
可以用 REQUIRE SUBJECT '/CN=myclient.example.com'來限制證書的使用。
在此設(shè)置證書是你的CA給頒發(fā)的,你頒發(fā)的證書你就能有很多可控的,結(jié)果就是你頒發(fā)的證書都是被信任的。
配置 3: Server/Client 與公共 CA
方案 3與方案 2相似。但公共的CA會(huì)指定多個(gè)的證書,同樣也會(huì)吊銷這些證書。
你應(yīng)該了解 --ssl-verify-server-cert ,以確保服務(wù)器有一個(gè)帶主機(jī)名的證書。否則,有人可能會(huì)用一個(gè)不帶主機(jī)名的有效證書來發(fā)起中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)。
也應(yīng)該使用 REQUIRE X509 字段,要求每個(gè)用戶 SUBJECT 、ISSUER(可選)字段。
配置 4: Server/Client 和多個(gè)公共 CA's
這個(gè)方案用起來顯得輕而易舉。
可以使用證書包 (一個(gè)文件多個(gè)證書),并用 ssl ca 命令指定此文件。
在Ubuntu系統(tǒng)上,這個(gè)證書由/etc/ssl/certs/ca-certificates.crt 下的 ca-certificates 包提供
其他選項(xiàng),用“指定assl-capath”來代替“使用ssl-ca”,這樣就可以設(shè)置到/etc/ssl/certs里。如果想用CA的默認(rèn)目錄,那就得運(yùn)行OpenSSL 中的c_rehash 程序來生成正確的符號(hào)連接(只在OpenSSL下可用)。
配置 5: Replication(復(fù)制)
設(shè)置 CHANGE MASTER TO 命令中MASTER_SSL_* 就可實(shí)現(xiàn)。
如果開啟了主機(jī)名驗(yàn)證,就確保用了 MASTER_SSL_VERIFY_SERVER_CERT。
只有這樣才能真正確保 replication 用戶的SSL連接是要求的SSL連接。如果SSL允許了,SHOW SLAVE STATUS就會(huì)顯示輸出,而不是不可用。
每臺(tái)服務(wù)器一個(gè)CA還是集中式CA?
可以每服務(wù)器用一個(gè)CA然后指定一個(gè)客戶端證書,但是每個(gè)服務(wù)器的客戶端都需要不同的證書來連接,也就是說你會(huì)發(fā)放很多CA證書。
所以你可能就會(huì)想要使用一個(gè)CA,而不是每個(gè)服務(wù)器一個(gè)CA。
出錯(cuò)了怎么辦?
如果其中一個(gè)私有密鑰(客戶端,服務(wù)器或CA)損壞,有以下幾種辦法處理:
什么也不做,只要等到證書過期。這只適用于短暫的證書(如證書有效期是7天)。這樣做容易讓你受到攻擊,你也可能會(huì)有其他緩解風(fēng)險(xiǎn)的方法。問題是,每7天就得重啟MySQL,而且還需要一些自動(dòng)分配證書的機(jī)制。
重新創(chuàng)建所有證書和密鑰(包括 CA)。這只適用于CA、服務(wù)器和用戶數(shù)量較少的情況。
用CRL(Certificate Revocation list證書吊銷列表)。 這樣做只在你的證書有正確序列號(hào)的情況下管用。此外,你要是有多個(gè)CA的話,就必須每個(gè)CA都捆綁CRL,并在c_rehash創(chuàng)建的符號(hào)連接的目錄中指定ssl-crl,指定ssl-crl路徑(僅OpenSSL)。如果使用CRL,那MySQL 的版本要是5.6或更高,然后更新CRL,也更新所有客戶端。
注意: 如果密鑰泄露了,就必須重新創(chuàng)建私有密鑰,僅用以前的CSR(證書簽名請(qǐng)求)是不夠的。
客戶端配置注意事項(xiàng)
ssl-ca 參數(shù)可在my.cnf的[client]部分設(shè)置,但這樣設(shè)置mysql binlog就不管用了,所以在客戶端用loose-ssl-ca 代替。ssl-key 和 ssl-cert 參數(shù)應(yīng)該是在~/.my.cnf文件的[client]部分,這些文件都應(yīng)該適當(dāng)?shù)谋Wo(hù)起來。
目前以my_config_editor創(chuàng)建的'login-path'無法添加到SSL設(shè)置。
密碼注意事項(xiàng)
用 SSL 加密,可以設(shè)置一定的密碼,用 YaSSL 就很有限。當(dāng)使用 OpenSSL 時(shí),就可以使用一個(gè)密碼套件,這套件是一組特定的密碼集、一些過濾器和一個(gè)規(guī)則。
YaSSL, OpenSSL 的狀態(tài)變量注意事項(xiàng)
如果很難判斷你的MySQL用的是 OpenSSL 還是 YaSSL, 有些方法可以幫你,如使用命令ldd /path/to/mysqld。默認(rèn)情況下 MySQL Community Edition 用的是 YaSSL , MySQL Enterprise Edition 用的是 OpenSSL。
根據(jù)SSL執(zhí)行情況,某些狀態(tài)變量可能更新的不正確。
為確保不受任何SSL漏洞影響,你最好參照 Oracle 關(guān)鍵補(bǔ)丁更新,保持你的 MySQL 和 OpenSSL及時(shí)更新。
運(yùn)行 CA的注意事項(xiàng)
其實(shí)并沒有看起來那么容易,往往開始很簡單,往后很無奈。要十分肯定的知道怎么發(fā)布CRL,X509 擴(kuò)展是什么,你都必須用什么。
有個(gè)網(wǎng)站告訴你如何配置你自己的CA:如何做一個(gè)自有的證書頒發(fā)機(jī)構(gòu)(CA) - jamielinux
也有許多公共CA會(huì)給你私有的 CA 提供主機(jī)。
SSL/TLS書籍推薦
筆者推薦一本關(guān)于SSL的書:Bulletproof SSL and TLS 《SSL和TLS的防彈衣》
還有一本關(guān)于密碼學(xué)歷史的書,非常有趣:The Code Book
譯者高中時(shí)候讀過這本書的中文版《密碼故事》,確實(shí)不錯(cuò)。
- linux系統(tǒng)中使用openssl實(shí)現(xiàn)mysql主從復(fù)制
- MySQL基于SSL協(xié)議進(jìn)行主從復(fù)制的詳細(xì)操作教程
- 多種不同的 MySQL 的 SSL 配置
- mysql通過ssl的方式生成秘鑰具體生成步驟
- mysql show processlist 顯示mysql查詢進(jìn)程
- 通過mysql show processlist 命令檢查mysql鎖的方法
- processlist命令 查看mysql 線程
- Apache、SSL、MySQL和PHP平滑無縫地安裝
- apache+mysql+php+ssl服務(wù)器之完全安裝攻略
- MySQL 使用 SSL 連接配置詳解
相關(guān)文章
mysql數(shù)據(jù)庫視圖和執(zhí)行計(jì)劃實(shí)戰(zhàn)案例
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫視圖和執(zhí)行計(jì)劃的相關(guān)資料,在使用MySQL過程中視圖和執(zhí)行計(jì)劃是一個(gè)很好的工具,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02故障的機(jī)器修好后重啟,狂拉主庫binlog,導(dǎo)致網(wǎng)絡(luò)問題的解決方法
本文主要記錄一次簡單的、典型的故障,發(fā)生問題的原因很簡單,這個(gè)問題發(fā)生也很簡單,各位同學(xué)一定要注意,一不留神就會(huì)對(duì)主庫造成影響2016-04-04MySQL Delete 刪數(shù)據(jù)后磁盤空間未釋放的原因
這篇文章主要介紹了MySQL Delete 刪數(shù)據(jù)后磁盤空間未釋放的原因,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-05-05MySQL數(shù)據(jù)庫如何開啟遠(yuǎn)程連接(多備份)
多備份服務(wù)器在備份你的數(shù)據(jù)庫時(shí),必須能夠遠(yuǎn)程連接上你的數(shù)據(jù)庫。但是一般來說mysql安裝時(shí)都是關(guān)閉遠(yuǎn)程連接的,因此,需要你開通mysql數(shù)據(jù)庫的遠(yuǎn)程訪問權(quán)限。那么如何開啟呢2015-01-01openEuler?RPM方式安裝MySQL8的實(shí)現(xiàn)
本文主要介紹了openEuler?RPM方式安裝MySQL8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01mysql自動(dòng)停止 Plugin FEDERATED is disabled 的完美解決方法
今天在配置服務(wù)器的時(shí)候,發(fā)現(xiàn)mysql的一個(gè)錯(cuò)誤提示在 本地計(jì)算機(jī) 無法啟動(dòng) MySQL 服務(wù)。錯(cuò)誤 1067: 進(jìn)程意外終止,其實(shí)原因很多這個(gè)不是導(dǎo)致進(jìn)程意外終止的最終原因,但可以解決2016-04-04MySQL性能優(yōu)化的一些技巧幫助你的數(shù)據(jù)庫
你完成了你的品牌新的應(yīng)用程序,一切工作就像一個(gè)魅力;突然間,一個(gè)大爆發(fā)的用戶殺死你的MySQL服務(wù)器,您的網(wǎng)站已關(guān)閉,是什么問題導(dǎo)致的呢?以下是MySQL性能優(yōu)化的一些技巧,將幫助你,幫助你的數(shù)據(jù)庫2013-01-01