溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器

發(fā)布時(shí)間:2023-02-13 14:23:16 來(lái)源:億速云 閱讀:334 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要介紹了怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

先決條件 (Prerequisite)

對(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

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

在本文中,MySQL服務(wù)器所在的計(jì)算機(jī)的名稱將稱為SSLServer1 ,從中我們將建立與MySQL服務(wù)器的安全SSL連接的計(jì)算機(jī)的名稱將稱為SSLServer2 。

檢查SSL狀態(tài) (Checking status of SSL)

因此,讓我們開(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

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

輸入root用戶的密碼,然后按鍵盤(pán)上的Enter鍵。

登錄后,鍵入并執(zhí)行以下命令:

SHOW VARIABLES LIKE ‘%ssl%’;

顯示變量,例如'%ssl%';

根據(jù)計(jì)算機(jī)上安裝MySQL版本,您可以獲得不同的結(jié)果。 如果運(yùn)行的是MySQL服務(wù)器5.7.27及以下版本,則可能會(huì)得到以下結(jié)果:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

可以看出,禁用了have_openssl和have_ssl變量。 要確認(rèn)當(dāng)前連接未使用SSL,請(qǐng)執(zhí)行以下操作:

\s
\ s
or

要么狀態(tài)

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

輸出結(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)前連接未使用加密:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

在當(dāng)前連接使用加密的情況下,該值將不會(huì)為空,如下所示:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器         

  • 注意:我使用的是MySQL 5.7.29版本,默認(rèn)情況下啟用了SSL,但在此示例中,我通過(guò)修改my.cnf文件以顯示SSL的禁用狀態(tài)來(lái)禁用 SSL:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

在此配置文件中,我輸入了以下命令來(lái)禁用SSL:

skip_ssl
skip_ssl

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

要啟用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’

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

但是,如果您安裝了MySQL 5.7.28及更高版本,則將在/ var / lib / mysql位置上自動(dòng)生成SSL認(rèn)證,并在啟動(dòng)MySQL時(shí)啟用SSL加密:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

配置遠(yuǎn)程MySQL服務(wù)器 (Configuring remote MySQL server)

既然我們已經(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ù)器

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

要允許從任何遠(yuǎn)程IP地址連接到MySQL服務(wù)器,請(qǐng)?jiān)贛ySQL配置文件/etc/mysql/my.cnf中添加以下內(nèi)容:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

現(xiàn)在,重新啟動(dòng)MySQL服務(wù),以使更改生效:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

當(dāng)我們?cè)俅螄L試連接到遠(yuǎn)程MySQL服務(wù)器時(shí),我們將收到一條錯(cuò)誤消息:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

當(dāng)前,所有MySQL用戶都配置為從MySQL服務(wù)器本地連接。 要連接到遠(yuǎn)程MySQL服務(wù)器,您將需要使用客戶端計(jì)算機(jī)的IP地址創(chuàng)建一個(gè)新用戶,在本例中,我們需要SSLServer2計(jì)算機(jī)的IP地址。

要在終端類型中查看機(jī)器的IP地址(SSLServer2),然后執(zhí)行以下命令:

Ifconfig

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

現(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)程MySQL服務(wù)器      

這要求使用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連接到遠(yuǎn)程MySQL服務(wù)器      

輸入SSL_USER的密碼后,您將能夠連接到位于SSLServer1機(jī)器上的遠(yuǎn)程MySQL服務(wù)器:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

現(xiàn)在,鍵入\ s確認(rèn)服務(wù)器狀態(tài)并確認(rèn)您正在使用安全連接:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

要確認(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)被拒絕(使用密碼:是)

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

到目前為止,您已經(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ī)上:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

復(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ù)器:

怎么使用SSL連接到遠(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)容:

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

現(xiàn)在,您可以連接到遠(yuǎn)程MySQL服務(wù)器,而無(wú)需在連接字符串中添加–ssl-ca,–ssl-cert和–ssl-key選項(xiàng):

怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器      

關(guān)于“怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“怎么使用SSL連接到遠(yuǎn)程MySQL服務(wù)器”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)
AI