MySQL默認(rèn)的數(shù)據(jù)通道是不加密的,在一些安全性要求特別高的場(chǎng)景下,我們需要配置MySQL端口為SSL,使得數(shù)據(jù)通道加密處理,避免敏感信息泄漏和被篡改。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來(lái)客戶和效益!創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)負(fù)責(zé)任的成都網(wǎng)站制作公司!
當(dāng)然,啟用MySQL SSL之后,由于每個(gè)數(shù)據(jù)包都需要加密和解密,這個(gè)對(duì)MySQL的性能是有不小影響的,讀者們?cè)谑褂玫臅r(shí)候,要根據(jù)實(shí)際情況斟酌。
MySQL客戶端登錄服務(wù)器時(shí)候的密碼不是明文傳輸,有加密策略處理。
筆者是在 ubuntu12.04 系統(tǒng)上使用MySQL 5.5版本測(cè)試的,其他環(huán)境請(qǐng)讀者自行匹配。
配置MySQL服務(wù)器證書
編輯 /etc/mysql/my.cnf 文件
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
把上面三行默認(rèn)證書配置注釋打開,使用自己的證書。筆者就使用上次在搭建自己的CA服務(wù) – OpenSSL CA 實(shí)戰(zhàn)文章中生成的證書
ssl-ca=/home/yunweipai/user_certs/ca_cert.cer
ssl-cert=/home/yunweipai/user_certs/web.cer
ssl-key=/home/yunweipai/user_certs/web_key_plain.pem
這里需要注意的是,在ubuntu上,配置證書后如果不生效,參考這里解決方法
注意上面配置的 web_key_plain.pem 文件,由于MySQL不支持加密后的私鑰,因此我們使用命令
openssl rsa -in web_key.pem -passin pass:Yunweipai@123 -out web_key_plain.pem
將私鑰解密。MySQL不支持私鑰加密的原因是從安全性角度考慮,因?yàn)槿绻脩魝鬟f一個(gè)加密的私鑰,那么必須要用戶傳密碼,那么MySQL怎么存儲(chǔ)這個(gè)密碼呢?這就引出了我們?cè)诿艽a存儲(chǔ)和傳輸?shù)陌踩ㄗh里面提到的一系列問(wèn)題了。
所以MySQL為了簡(jiǎn)化實(shí)現(xiàn),就不支持私鑰加密。
指定客戶端連接方式
MySQL服務(wù)端在對(duì)客戶端授權(quán)的時(shí)候,可以通過(guò)選項(xiàng)指定客戶端連接MySQL 服務(wù)器的SSL級(jí)別,參考MySQL賦權(quán)的 REQUIRE值:
ssl_option
SSL: 不認(rèn)證客戶端,客戶端不需要提供證書
X509: 客戶端必須發(fā)送一個(gè)有效的X509證書
issuer: 客戶端的證書是否是服務(wù)器所配置的CA頒發(fā)的(在我們場(chǎng)景下是ca_cert.cer頒發(fā)的證書)
subject: 認(rèn)證證書的subject(關(guān)于證書的subject在之前的文章有介紹)
cipher: 指定加密算法
這些選項(xiàng)可以疊加使用,如:X509|issuser
客戶端連接(SSL方式)
mysql 客戶端連接
mysql -u root -pChangeme_123 -P 3306 --ssl-ca=/home/yunweipai/user_certs/ca_cert.cer
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql \s
--------------
mysql Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (i686) using readline 6.2
Connection id: 36
Current database:
Current user: root@localhost
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 29 sec
Threads: 1 Questions: 109 Slow queries: 0 Opens: 48 Flush tables: 1 Open tables: 41 Queries per second avg: 3.758
--------------
JDBC連接
在jdbc字符串中增加下面參數(shù)
useSSL=trueverifyServerCertificate=false
這么就不需要客戶端配置證書了,配置就簡(jiǎn)單很多。因?yàn)閙ysql本身有賬號(hào)口令認(rèn)證,因此不需要證書認(rèn)證。
如果覺(jué)得條件(能力)允許的,建議報(bào)考的。Oracle數(shù)據(jù)庫(kù)認(rèn)證專家(Oracle Certified Professional)是Oracle公司的Oracle數(shù)據(jù)庫(kù)DBA(Database Administrator 數(shù)據(jù)庫(kù)管理員)認(rèn)證課程,通過(guò)這個(gè)考試, 說(shuō)明此人可以管理大型數(shù)據(jù)庫(kù), 或者能夠開發(fā)可以部署到整個(gè)企業(yè)的強(qiáng)大應(yīng)用。要成為OCP需要先獲得OCA (Oracle數(shù)據(jù)庫(kù)認(rèn)證助理Oracle Certified Associate)的認(rèn)證,目前主要是Oracle 11g版本認(rèn)證。
MySQL OCP考試可以自行報(bào)名,無(wú)需參加相關(guān)機(jī)構(gòu)的培訓(xùn)。這意味著,如果你能力足夠強(qiáng)大,那么完全可以自行報(bào)名參加考試。
mysql連接可分為socket連接和TCP|IP連接兩種。
[root@localhost bin]# mysql -uroot -p123456 -S/tmp/mysql.sock
-S/tmp/mysql.sock可以省略,因?yàn)槟J(rèn)參數(shù)如下:
假如sock文件另有其它,那么就后面不能省略,需要指定下。
mysql -h127.0.0.1 -P3306 -uroot -p123456
那么問(wèn)題來(lái)了,如何知道當(dāng)前連接的連接方式?
查看當(dāng)前連接方式,使用\s 或者status命令
Connection: Localhost via UNIX socket 表示使用 socket 進(jìn)行本地的連接
SSL: Not in use 沒(méi)有使用SSL
Connection: 127.0.0.1 via TCP/IP 使用TCP/IP 協(xié)議進(jìn)行遠(yuǎn)程連接
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256 使用了SSL加密
mysql5.7默認(rèn)是使用SSL的方式來(lái)進(jìn)行通訊的。
/s輸出SSL: Not in use,說(shuō)明當(dāng)前沒(méi)有使用SSL連接。
再看下error.log有一個(gè)waning:failed to set up SSL because of the following SSL liberary error:SSL context is not usable withut certificate and private key。公密鑰文件不存在,所以無(wú)法啟用SSL的連接方式。
1、進(jìn)入bin目錄執(zhí)行命令: mysql_ssl_rsa_setup 在/data 根目錄 生成相關(guān)的*.pem 密鑰文件。
2、對(duì)新生成到pem文件授權(quán)chown mysql:mysql *.pem
3、 /etc/init.d/mysqld restart 重啟mysql
4、進(jìn)入命令客戶端執(zhí)行\(zhòng)s
使用IP/TCP遠(yuǎn)程連接時(shí),\s輸出 SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256。說(shuō)明已經(jīng)用上SSL加密。
使用socket進(jìn)行本地連接,就不會(huì)使用SSL加密。\s輸出SSL: Not in use;
因?yàn)镾SL開啟可能有性能影響。如果不希望使用ssl加密登錄連接,那么可以使用下面命令進(jìn)行禁用:mysql -h127.0.0.1 -uroot -p123456 --ssl-mode=DISABLED
強(qiáng)制一個(gè)用戶使用ssl
之后david用戶就必須使用ssl登錄了,否則報(bào)錯(cuò)如下:
取消一個(gè)用戶強(qiáng)制使用ssl
x509認(rèn)證在開啟SSL的基礎(chǔ)下,還強(qiáng)制指定用戶必須使用client-cert.pem和client-key.pem證書、密鑰文件來(lái)登錄,否則登錄不了。x509是mysql最高等級(jí)的認(rèn)證機(jī)制。
之前已經(jīng)在data根目錄生成了8個(gè) *.pem文件
把其中client-cert.pem和client-key.pem導(dǎo)出
如下,再使用之前的命令登錄。發(fā)現(xiàn)登錄不了了。
此時(shí)想要登錄必須在客戶端指定SSL CERT File和SSL Key File 如下在navicat中
在mysql workbench中
1、首先明確你的MySQL版本是否支持或是否開啟SSL:
show global variables like 'have_%ssl';
2、確認(rèn)OpenSSL安裝并加入PATH系統(tǒng)路徑環(huán)境變量
3、正確創(chuàng)建號(hào)證書
4、通過(guò)my.cnf或者命令行在mysql啟動(dòng)的時(shí)候加載證書配置,例如:
mysqld --ssl-ca=ca-cert.pem --ssl-cert=server-cert.pem --ssl-key=server-key.pem
5、客戶端連接時(shí)同樣要記得加載證書
創(chuàng)建Server SSL證書和私鑰
首先,創(chuàng)建一個(gè)臨時(shí)的工作目錄,我們將把私鑰和證書文件放在該目錄下。
$ sudo mkdir ~/cert
$ cd ~/cert
確保OpenSSL已安裝在運(yùn)行MySQL服務(wù)器的系統(tǒng)上。通常,所有Linux發(fā)行版在默認(rèn)情況下都安裝了OpenSSL。想檢查一下OpenSSL有沒(méi)有安裝,不妨使用下面這個(gè)命令。
$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
現(xiàn)在,繼續(xù)創(chuàng)建CA私鑰和證書。下面這些命令將創(chuàng)建ca-key.pem和ca-cert.pem。
$ openssl genrsa 2048 ca-key.pem
$ openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem ca-cert.pem
第二個(gè)命令會(huì)詢問(wèn)你幾個(gè)問(wèn)題。你在這些字段里填入什么并不重要。只管填好那些字段。
下一步是為服務(wù)器創(chuàng)建私鑰。
$ openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem server-req.pem
這個(gè)命令會(huì)再次詢問(wèn)幾個(gè)問(wèn)題,你可以填寫上一步中提供的相同答案。
下一步,使用下面這個(gè)命令,將服務(wù)器的私鑰導(dǎo)出成RSA類型的密鑰。
$ openssl rsa -in server-key.pem -out server-key.pem
最后,使用CA證書,創(chuàng)建服務(wù)器證書。
$ openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 server-cert.pem
配置MySQL服務(wù)器上的SSL
完成上述過(guò)程后,我們應(yīng)該有了CA證書、服務(wù)器的私鑰及其證書。下一步就是配置MySQL服務(wù)器,以
MySQL數(shù)據(jù)庫(kù)認(rèn)證分開發(fā)和管理兩種,
開發(fā)認(rèn)證:Certified MySQL 5.0 Developer (CMDEV)
需要通過(guò)兩門考試:003-*和004-*(*為任意考試號(hào),現(xiàn)在為002),即003-002,004-002
管理認(rèn)證:Certified MySQL 5.0 DBA (CMDBA)
需要通過(guò)兩門考試:005-*和006-*(*為任意考試號(hào),現(xiàn)在為002),即005-002,006-002
現(xiàn)在還有一新的認(rèn)證:Certified MySQL 5.1 Cluster DBA (CMCDBA)
該認(rèn)證是MySQL數(shù)據(jù)庫(kù)集群管理認(rèn)證
需要首先獲得CMDBA,然后再加考:009-*(*為任意考試號(hào),現(xiàn)在為002),即009-002就可獲得
除了上述考試外,MySQL還提供了兩門升級(jí)考試
從Core MySQL 4.x可以通過(guò)考007-001升級(jí)到CMDEV
從Professional MySQL 4.x可以通過(guò)考008-001升級(jí)到CMDBA
4x50upgrades.png (13.94 KB)
2007-4-18 22:13
詳情請(qǐng)見(jiàn):
考試費(fèi)用,每門考試$50,所以與微軟認(rèn)證的MCITP SQL 2005或者M(jìn)CDBA 2000相比,還是很有競(jìng)爭(zhēng)力的!
現(xiàn)在注冊(cè)預(yù)約考試,在2007年5月15日之前考Beta考試還可以享受50%的折扣優(yōu)惠。
不過(guò)現(xiàn)在該認(rèn)證考試資料相當(dāng)少,僅有官方的學(xué)習(xí)指南: