《Mysql入門(mén)多種不同的 MySQL 的 SSL 配置》要點(diǎn):
本文介紹了Mysql入門(mén)多種不同的 MySQL 的 SSL 配置,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
在這篇博客的帖子里,我將會(huì)描述不同的使用MySQL數(shù)據(jù)庫(kù)的SSL配置辦法.MYSQL數(shù)據(jù)庫(kù)
SSL給了你什么?MYSQL數(shù)據(jù)庫(kù)
你可以通過(guò)互聯(lián)網(wǎng)使用 MySQL 復(fù)制特性(replication) 或者通過(guò)互聯(lián)網(wǎng)連接到MySQL.
還有可能是你通過(guò)企業(yè)網(wǎng)去連接,這樣會(huì)有很多人訪(fǎng)問(wèn).如果你使用一個(gè)自帶設(shè)備(BYOD)網(wǎng)絡(luò),這就更是一個(gè)問(wèn)題了.
SSL在這里通過(guò)加密網(wǎng)絡(luò)防止有針對(duì)性的監(jiān)聽(tīng).在與正確的服務(wù)器進(jìn)行交互時(shí),可以有效應(yīng)對(duì)中間人攻擊(man-in-the-middle attacks).
你還可以使用SSL客戶(hù)端證書(shū),讓它同暗碼一起作為身份識(shí)別的二要素.
SSL不是唯一的選擇, 你可以使用SSH和許多MySQL GUI客戶(hù)端,類(lèi)似MySQL Workbench提供的那個(gè)產(chǎn)品. 但是SSH的python腳本,或者mysqldump,不是那么易用.MYSQL數(shù)據(jù)庫(kù)
必要注意的事情:MYSQL數(shù)據(jù)庫(kù)
使用SSL在絕大多數(shù)情況下要比不使用SSL要好,所以沒(méi)有太多可能出現(xiàn)問(wèn)題的地方.
但是以下幾點(diǎn)需要注意:
對(duì)平安性的錯(cuò)誤估計(jì)MYSQL數(shù)據(jù)庫(kù)
你認(rèn)為你在SSL的掩護(hù)之下,但是你可能忘記設(shè)置一些選項(xiàng)從而導(dǎo)致程序可以接受非SSL的連接,所以要確保設(shè)置必須使用SSL作為連接方式.可以使用Wireshark或者其它類(lèi)似的工具來(lái)檢測(cè)你的流量是否都真的被加密處理.
沒(méi)有及時(shí)更新證書(shū)MYSQL數(shù)據(jù)庫(kù)
你應(yīng)該通過(guò)一些辦法在證書(shū)即將過(guò)期的時(shí)候通知自己.可以是nagios檢查,可以是日歷里面的小貼士,可以來(lái)自于證書(shū)簽發(fā)機(jī)構(gòu)的email.如果證書(shū)過(guò)期,將會(huì)導(dǎo)致你的客戶(hù)端無(wú)法正常獲得響應(yīng).MYSQL數(shù)據(jù)庫(kù)
性能MYSQL數(shù)據(jù)庫(kù)
如果性能很重要,就應(yīng)該做基準(zhǔn)測(cè)試,來(lái)看看沒(méi)有SSL的情況下有什么影響.在 OpenSSL 和 YaSSL 下嘗試不同的暗碼,并看哪個(gè)的執(zhí)行效果最佳.
使用流量監(jiān)測(cè)的工具MYSQL數(shù)據(jù)庫(kù)
如果你在使用像 VividCortex,pt-query-digest 基于 pcap 的工具,那么你應(yīng)該確保在部署完SSL后,這些工具還能用,可以提供密鑰來(lái)實(shí)現(xiàn).然后使用一個(gè)非 Diffie-Hellman (DH) 的暗碼,或者使用其他的源,如 performance_schema、slow query log,這還要看你的應(yīng)用程序支持哪種,也可能會(huì)包含一些負(fù)載均衡的設(shè)置.MYSQL數(shù)據(jù)庫(kù)
MySQL 中的 SSL 和瀏覽器中的 SSL 有什么分歧MYSQL數(shù)據(jù)庫(kù)
瀏覽器默認(rèn)有一個(gè) CA 的信任列表,但 MySQL 默認(rèn)是沒(méi)有的.這就是他們最大的不同.MySQL 和OpenVPN 使用SSL非常相似.
MySQL server 和 Web server 都開(kāi)啟了 SSL,同時(shí)也都需要有客戶(hù)端證書(shū),這是他們相同的地方.
有一些細(xì)微的協(xié)議支持差別,好比:MySQL 只支持 TLS v1.0,默認(rèn)不支持主機(jī)名驗(yàn)證,所以你的證書(shū)可能是給db1.example.com的,也可能是給db2.example的,瀏覽器則可能會(huì)用OCSP、CRL's 或 CRLsets 來(lái)驗(yàn)證證書(shū)是否有效. MySQL 5.6以后就只支持CRL驗(yàn)證.MYSQL數(shù)據(jù)庫(kù)
配置 1: Server/Client 的內(nèi)部 CAMYSQL數(shù)據(jù)庫(kù)
最基本的安裝和我創(chuàng)建 mysslgen 的位置.
首先在服務(wù)器上創(chuàng)建一個(gè)PKCS#1格式的密鑰,若PKCS#8不行.然后創(chuàng)建一個(gè)可以用CA部署的CSR(Certificate Signing Request證書(shū)簽名哀求) .最后結(jié)果是一個(gè)CA證書(shū)服務(wù)器和一個(gè)服務(wù)器的密鑰.筆者習(xí)慣用PEM格式的證書(shū)
服務(wù)器配置:
SSL證書(shū)服務(wù)器和密鑰 (ssl-certandssl-key)
SSL CA 證書(shū) (ssl-ca)
客戶(hù)端配置:
SSL CA 證書(shū)(ssl-ca)
要求賬戶(hù)用SSL驗(yàn)證,那你的GRANT語(yǔ)句應(yīng)該用REQUIRE SSL選項(xiàng).MYSQL數(shù)據(jù)庫(kù)
配置 2: Server/Client 的內(nèi)部 CA 和 客戶(hù)端證書(shū)MYSQL數(shù)據(jù)庫(kù)
首先得在服務(wù)器上開(kāi)啟SSL,然后給客戶(hù)端創(chuàng)建證書(shū).
然后在客戶(hù)端指定客戶(hù)端證書(shū)和密鑰 ssl-cert和ssl-key.
現(xiàn)在必須要用 REQUIRE X509來(lái)要求一個(gè)有效的證書(shū).如果這個(gè)CA不只用在MySQL server上,那就不起作用了,因?yàn)槠渌艘灿锌赡苣玫接行У淖C書(shū),
可以用 REQUIRE SUBJECT '/CN=myclient.example.com'來(lái)限制證書(shū)的使用.
在此設(shè)置證書(shū)是你的CA給發(fā)表的,你發(fā)表的證書(shū)你就能有很多可控的,結(jié)果就是你發(fā)表的證書(shū)都是被信任的.MYSQL數(shù)據(jù)庫(kù)
配置 3: Server/Client 與公共 CAMYSQL數(shù)據(jù)庫(kù)
方案 3與方案 2相似.但公共的CA會(huì)指定多個(gè)的證書(shū),同樣也會(huì)吊銷(xiāo)這些證書(shū).
你應(yīng)該了解 --ssl-verify-server-cert ,以確保服務(wù)器有一個(gè)帶主機(jī)名的證書(shū).不然,有人可能會(huì)用一個(gè)不帶主機(jī)名的有效證書(shū)來(lái)發(fā)起中間人攻擊(Man-in-the-MiddleAttack,簡(jiǎn)稱(chēng)“MITM攻擊”).
也應(yīng)該使用 REQUIRE X509 字段,要求每個(gè)用戶(hù) SUBJECT 、ISSUER(可選)字段.MYSQL數(shù)據(jù)庫(kù)
配置 4: Server/Client 和多個(gè)公共 CA'sMYSQL數(shù)據(jù)庫(kù)
這個(gè)方案用起來(lái)顯得輕而易舉.
可以使用證書(shū)包 (一個(gè)文件多個(gè)證書(shū)),并用 ssl ca 命令指定此文件.
在Ubuntu系統(tǒng)上,這個(gè)證書(shū)由 /etc/ssl/certs/ca-certificates.crt 下的 ca-certificates 包提供
其他選項(xiàng),用“指定assl-capath”來(lái)代替“使用ssl-ca”,這樣就可以設(shè)置到/etc/ssl/certs里.如果想用CA的默認(rèn)目錄,那就得運(yùn)行OpenSSL 中的c_rehash 法式來(lái)生成正確的符號(hào)連接(只在OpenSSL下可用).MYSQL數(shù)據(jù)庫(kù)
配置 5: Replication(復(fù)制)MYSQL數(shù)據(jù)庫(kù)
設(shè)置 CHANGE MASTER TO 命令中MASTER_SSL_* 就可實(shí)現(xiàn).
如果開(kāi)啟了主機(jī)名驗(yàn)證,就確保用了 MASTER_SSL_VERIFY_SERVER_CERT.
只有這樣才能真正確保 replication 用戶(hù)的SSL連接是要求的SSL連接.如果SSL允許了,SHOW SLAVE STATUS就會(huì)顯示輸出,而不是弗成用.
每臺(tái)服務(wù)器一個(gè)CA還是集中式CA?MYSQL數(shù)據(jù)庫(kù)
可以每服務(wù)器用一個(gè)CA然后指定一個(gè)客戶(hù)端證書(shū),但是每個(gè)服務(wù)器的客戶(hù)端都必要不同的證書(shū)來(lái)連接,也就是說(shuō)你會(huì)發(fā)放很多CA證書(shū).
所以你可能就會(huì)想要使用一個(gè)CA,而不是每個(gè)服務(wù)器一個(gè)CA.MYSQL數(shù)據(jù)庫(kù)
失足了怎么辦?MYSQL數(shù)據(jù)庫(kù)
如果其中一個(gè)私有密鑰(客戶(hù)端,服務(wù)器或CA)損壞,有以下幾種辦法處理:
什么也不做,只要等到證書(shū)過(guò)期.這只適用于短暫的證書(shū)(如證書(shū)有效期是7天).這樣做容易讓你受到攻擊,你也可能會(huì)有其他緩解風(fēng)險(xiǎn)的方法.問(wèn)題是,每7天就得重啟MySQL,而且還需要一些自動(dòng)分配證書(shū)的機(jī)制.
重新創(chuàng)建所有證書(shū)和密鑰(包括 CA).這只適用于CA、服務(wù)器和用戶(hù)數(shù)量較少的情況.
用CRL(Certificate Revocation list證書(shū)吊銷(xiāo)列表). 這樣做只在你的證書(shū)有正確序列號(hào)的情況下管用.此外,你要是有多個(gè)CA的話(huà),就必須每個(gè)CA都捆綁CRL,并在c_rehash創(chuàng)建的符號(hào)連接的目錄中指定 ssl-crl,指定ssl-crl路徑(僅OpenSSL).如果使用CRL,那MySQL 的版本要是5.6或更高,然后更新CRL,也更新所有客戶(hù)端.
注意: 如果密鑰泄露了,就必須重新創(chuàng)建私有密鑰,僅用以前的CSR(證書(shū)簽名哀求)是不夠的.MYSQL數(shù)據(jù)庫(kù)
客戶(hù)端配置注意事項(xiàng)MYSQL數(shù)據(jù)庫(kù)
ssl-ca 參數(shù)可在my.cnf的[client]部分設(shè)置,但這樣設(shè)置mysql binlog就不管用了,所以在客戶(hù)端用loose-ssl-ca 代替.ssl-key 和 ssl-cert 參數(shù)應(yīng)該是在~/.my.cnf文件的[client]部分,這些文件都應(yīng)該適當(dāng)?shù)谋Wo(hù)起來(lái).
目前以my_config_editor創(chuàng)建的'login-path'無(wú)法添加到SSL設(shè)置.
暗碼注意事項(xiàng)MYSQL數(shù)據(jù)庫(kù)
用 SSL 加密,可以設(shè)置一定的暗碼,用 YaSSL 就很有限.當(dāng)使用 OpenSSL 時(shí),就可以使用一個(gè)暗碼套件,這套件是一組特定的暗碼集、一些過(guò)濾器和一個(gè)規(guī)則.MYSQL數(shù)據(jù)庫(kù)
YaSSL, OpenSSL 的狀態(tài)變量注意事項(xiàng)MYSQL數(shù)據(jù)庫(kù)
如果很難判斷你的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í)更新.MYSQL數(shù)據(jù)庫(kù)
運(yùn)行 CA的注意事項(xiàng)MYSQL數(shù)據(jù)庫(kù)
其實(shí)并沒(méi)有看起來(lái)那么容易,往往開(kāi)始很簡(jiǎn)單,往后很無(wú)奈.要十分肯定的知道怎么發(fā)布CRL,X509 擴(kuò)展是什么,你都必須用什么.
有個(gè)網(wǎng)站告訴你如何配置你自己的CA:如何做一個(gè)自有的證書(shū)發(fā)表機(jī)構(gòu)(CA) - jamielinux
也有許多公共CA會(huì)給你私有的 CA 提供主機(jī).MYSQL數(shù)據(jù)庫(kù)
以上所述便是本文的全部?jī)?nèi)容了,希望大家能夠喜歡.MYSQL數(shù)據(jù)庫(kù)
請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論.我們將會(huì)由衷感激您的支持!MYSQL數(shù)據(jù)庫(kù)
歡迎參與《Mysql入門(mén)多種不同的 MySQL 的 SSL 配置》討論,分享您的想法,維易PHP學(xué)院為您提供專(zhuān)業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/11238.html