這篇文章主要介紹了怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
對(duì)于本文,需要安裝兩個(gè)Linux Ubuntu 18.04實(shí)例。
在其中一臺(tái)Ubuntu計(jì)算機(jī)上,使用“ 如何在Ubuntu 18.04上安裝MySQL”頁(yè)面中的指南安裝MySQL并配置root用戶。
在第二臺(tái)計(jì)算機(jī)上,使用以下命令安裝MySQL客戶端:
sudo apt install mysql-client
否則,當(dāng)嘗試連接到遠(yuǎn)程MySQL服務(wù)器時(shí),您將收到以下消息:
sudo: mysql: command not found
在本文中,MySQL服務(wù)器所在的計(jì)算機(jī)的名稱將稱為SSLServer1 ,從中我們將建立與MySQL服務(wù)器的安全SSL連接的計(jì)算機(jī)的名稱將稱為SSLServer2 。
因此,讓我們開(kāi)始為SSLServer1計(jì)算機(jī)上MySQL服務(wù)器配置SSL。 首先,讓我們檢查遠(yuǎn)程MySQL服務(wù)器實(shí)例上SSL的當(dāng)前狀態(tài)。
使用以下命令登錄到MySQL實(shí)例:
mysql -u root -p -h 127.0.0.1
輸入root用戶的密碼,然后按鍵盤(pán)上的Enter鍵。
登錄后,鍵入并執(zhí)行以下命令:
SHOW VARIABLES LIKE ‘%ssl%’;
顯示變量,例如'%ssl%';
根據(jù)計(jì)算機(jī)上安裝MySQL版本,您可以獲得不同的結(jié)果。 如果運(yùn)行的是MySQL服務(wù)器5.7.27及以下版本,則可能會(huì)得到以下結(jié)果:
可以看出,禁用了have_openssl和have_ssl變量。 要確認(rèn)當(dāng)前連接未使用SSL,請(qǐng)執(zhí)行以下操作:
\s \ s or
要么狀態(tài)
輸出結(jié)果將類似于以下內(nèi)容:
————–
mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper
Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 10 min 10 sec
Threads: 1 Questions: 6 Slow queries: 0 Opens: 106 Flush tables: 1 Open tables: 99 Queries per second avg: 0.009
————–
——————
適用于Linux(x86_64)的mysql Ver 14.14 Distrib 5.7.29,使用EditLine包裝器
連接ID:3
當(dāng)前數(shù)據(jù)庫(kù):
當(dāng)前用戶:root @ localhost
SSL:未使用
當(dāng)前尋呼機(jī):標(biāo)準(zhǔn)輸出
使用outfile:”
使用定界符:;
服務(wù)器版本:5.7.29-0ubuntu0.18.04.1(Ubuntu)
協(xié)議版本:10
連接:通過(guò)TCP / IP的127.0.0.1
服務(wù)器字符集:latin1
DB字符集:latin1
客戶端特征集:utf8
康涅狄格州字符集:utf8
TCP端口:3306
正常運(yùn)行時(shí)間:10分鐘10秒
線程:1問(wèn)題:6慢查詢:0打開(kāi):106刷新表:1打開(kāi)表:每秒平均查詢99次:0.009
——————
從上面可以看出,該連接未使用SSL。
確定當(dāng)前與MySQL服務(wù)器的連接是否使用加密的另一種方法是檢查Ssl_cipher狀態(tài)變量的會(huì)話值:
SHOW SESSION STATUS LIKE ‘Ssl_cipher’;
顯示會(huì)話狀態(tài),例如“ Ssl_cipher”;
如果該值為空,則表明當(dāng)前連接未使用加密:
在當(dāng)前連接使用加密的情況下,該值將不會(huì)為空,如下所示:
注意:我使用的是MySQL 5.7.29版本,默認(rèn)情況下啟用了SSL,但在此示例中,我通過(guò)修改my.cnf文件以顯示SSL的禁用狀態(tài)來(lái)禁用 SSL:
在此配置文件中,我輸入了以下命令來(lái)禁用SSL:
skip_ssl skip_ssl
要啟用SSL并生成適當(dāng)?shù)淖C書(shū)和密鑰文件,可以使用mysql_ssl_rsa_setup實(shí)用程序:
sudo mysql_ssl_rsa_setup –uid=mysql sudo mysql_ssl_rsa_setup –uid = mysql
默認(rèn)情況下,MySQL在以下位置存儲(chǔ)SSL證書(shū):
/ var / lib / mysql
讓我們通過(guò)執(zhí)行以下命令進(jìn)行檢查:
sudo find /var/lib/mysql/ -name ‘*.pem’
但是,如果您安裝了MySQL 5.7.28及更高版本,則將在/ var / lib / mysql位置上自動(dòng)生成SSL認(rèn)證,并在啟動(dòng)MySQL時(shí)啟用SSL加密:
既然我們已經(jīng)啟用了SSL,那么MySQL配置的下一步就是啟用(允許)遠(yuǎn)程連接。 默認(rèn)情況下,MySQL配置為偵聽(tīng)來(lái)自其安裝機(jī)器的連接,并且僅接受來(lái)自本地主機(jī) AKA 127.0.0.1 IP地址的連接。
如果現(xiàn)在嘗試從客戶端計(jì)算機(jī)(SSLServer2)連接到位于SSLServer1計(jì)算機(jī)上MySQL,我們可能會(huì)收到以下錯(cuò)誤消息:
ERROR 2003 (HY000): Can’t connect to MySQL server on (111)
錯(cuò)誤2003(HY000):無(wú)法連接到(111)上MySQL服務(wù)器
要允許從任何遠(yuǎn)程IP地址連接到MySQL服務(wù)器,請(qǐng)?jiān)贛ySQL配置文件/etc/mysql/my.cnf中添加以下內(nèi)容:
現(xiàn)在,重新啟動(dòng)MySQL服務(wù),以使更改生效:
當(dāng)我們?cè)俅螄L試連接到遠(yuǎn)程MySQL服務(wù)器時(shí),我們將收到一條錯(cuò)誤消息:
當(dāng)前,所有MySQL用戶都配置為從MySQL服務(wù)器本地連接。 要連接到遠(yuǎn)程MySQL服務(wù)器,您將需要使用客戶端計(jì)算機(jī)的IP地址創(chuàng)建一個(gè)新用戶,在本例中,我們需要SSLServer2計(jì)算機(jī)的IP地址。
要在終端類型中查看機(jī)器的IP地址(SSLServer2),然后執(zhí)行以下命令:
Ifconfig
現(xiàn)在,當(dāng)我們獲得所有必要的信息時(shí),讓我們通過(guò)添加REQUIRE SSL子句,創(chuàng)建一個(gè)可以通過(guò)安全連接連接到遠(yuǎn)程MySQL的用戶:
CREATE USER ‘SSL_USER’@' CREATE USER'SSL_USER'@'
創(chuàng)建用戶后,讓我們授予他訪問(wèn)所有遠(yuǎn)程MySQL數(shù)據(jù)庫(kù)的所有權(quán)限。
執(zhí)行以下命令:
GRANT ALL ON *.* TO ‘SSL_USER’@'
要立即應(yīng)用這些設(shè)置,請(qǐng)執(zhí)行以下操作:
FLUSH PRIVILEGES;
在SSLServer1計(jì)算機(jī)上還需要完成的另一件事是將require_secure_transport選項(xiàng)添加到my.cnf文件并將其設(shè)置為ON 。
這要求使用SSL建立所有遠(yuǎn)程連接。
之后,重新啟動(dòng)MySQL服務(wù),以應(yīng)用新設(shè)置:
sudo service mysql restart
這樣,我們就允許SSL_USER從遠(yuǎn)程位置進(jìn)行連接。 為了確認(rèn),讓我們用SSL_USER連接從SSLServer2機(jī)。
在SSLServer2計(jì)算機(jī)上,打開(kāi)終端并執(zhí)行以下命令:
mysql -u SSL_USER -p -h
輸入SSL_USER的密碼后,您將能夠連接到位于SSLServer1機(jī)器上的遠(yuǎn)程MySQL服務(wù)器:
現(xiàn)在,鍵入\ s確認(rèn)服務(wù)器狀態(tài)并確認(rèn)您正在使用安全連接:
要確認(rèn)MySQL服務(wù)器僅接受安全連接并拒絕不安全,請(qǐng)嘗試使用相同的憑據(jù)進(jìn)行連接,但這一次在連接字符串中添加–ssl-mode = disabled命令:
mysql -u SSL_USER -p -h –ssl-mode=disabled
執(zhí)行后,可能會(huì)出現(xiàn)以下錯(cuò)誤:
錯(cuò)誤1045(28000):用戶'SSL_USER'@''SSLServer2_IP'的訪問(wèn)被拒絕(使用密碼:是)
到目前為止,您已經(jīng)為MySQL服務(wù)器設(shè)置了由本地生成的證書(shū)頒發(fā)機(jī)構(gòu)(CA)簽名的SSL證書(shū),這足以為傳入的連接提供安全的加密。
為了提供SSLServer1和SSLServer2計(jì)算機(jī)之間的完全信任關(guān)系,將從SSLServer1計(jì)算機(jī)復(fù)制帶有客戶端證書(shū)和客戶端密鑰的CA證書(shū)到SSLServer2計(jì)算機(jī),還將SSL_USER修改為需要信任證書(shū)。
首先在SSLServer2機(jī)器上,創(chuàng)建一個(gè)文件夾,將在其中放置客戶端文件:
mkdir ~/ssl-client
使用SCP或SFTP將傳輸文件從一臺(tái)機(jī)器安全保護(hù)到另一臺(tái)機(jī)器上,或僅使用cat命令從SSLServer1機(jī)器上的CA證書(shū) , client-cert.pem和client-key.pem文件中讀取和復(fù)制內(nèi)容,然后創(chuàng)建這些文件并將內(nèi)容粘貼到SSLServer2計(jì)算機(jī)上:
復(fù)制適當(dāng)?shù)奈募?,更改SSL_USER ,并放置REQUIRE X509子句:
ALTER USER ‘SSL_USER’@'
現(xiàn)在,當(dāng)使用SSL_USER用戶連接到遠(yuǎn)程MySQL服務(wù)器時(shí),必須指定–ssl-key和–ssl-cert選項(xiàng),也建議這樣做,但不需要指定–ssl-ca選項(xiàng)。 如果我們?cè)谖粗付蛻舳俗C書(shū)的情況下連接到遠(yuǎn)程MySQL服務(wù)器:
mysql -u SSL_USER1 -p -h
可能會(huì)出現(xiàn)以下錯(cuò)誤消息:
ERROR 1045 (28000): Access denied for user ‘SSL_USER’@’SLLServer2_IP’ (using password: YES)
讓我們通過(guò)在連接字符串中添加–ssl-ca,–ssl-cert和–ssl-key選項(xiàng)來(lái)指定適當(dāng)?shù)目蛻舳俗C書(shū),以指向?/ ssl-client目錄下的文件:
mysql -u SSL_USER -p -h SSLServer1_IP –ssl-ca =?/ ssl-client / ca.pem –ssl-cert =?/ ssl-client / client-cert.pem
按下Enter鍵后 ,您應(yīng)該成功連接到遠(yuǎn)程MySQL服務(wù)器:
每次要連接到遠(yuǎn)程MySQL服務(wù)器時(shí),使用–ssl-ca,–ssl-cert和–ssl-key選項(xiàng)并輸入相關(guān)文件的路徑是一項(xiàng)整齊且耗時(shí)的工作,因此讓我們進(jìn)行優(yōu)化和改進(jìn)連接可用性。
在SSLServer2機(jī)器中,如果my.cnf文件在以下位置不存在:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
我們可以在主目錄中創(chuàng)建一個(gè):
~/.my.cnf:
執(zhí)行以下命令:
nano ~/.my.cnf
并在.my.cnf文件中粘貼并保存以下內(nèi)容:
現(xiàn)在,您可以連接到遠(yuǎn)程MySQL服務(wù)器,而無(wú)需在連接字符串中添加–ssl-ca,–ssl-cert和–ssl-key選項(xiàng):
關(guān)于“怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。