共計 4799 個字符,預計需要花費 12 分鐘才能閱讀完成。
這篇文章主要介紹了怎么使用 SSL 連接到遠程 MySQL 服務器的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么使用 SSL 連接到遠程 MySQL 服務器文章都會有所收獲,下面我們一起來看看吧。
先決條件 (Prerequisite)
對于本文,需要安裝兩個 Linux Ubuntu 18.04 實例。
在其中一臺 Ubuntu 計算機上,使用“如何在 Ubuntu 18.04 上安裝 MySQL”頁面中的指南安裝 MySQL 并配置 root 用戶。
在第二臺計算機上,使用以下命令安裝 MySQL 客戶端:
sudo apt install mysql-client
否則,當嘗試連接到遠程 MySQL 服務器時,您將收到以下消息:
sudo: mysql: command not found
在本文中,MySQL 服務器所在的計算機的名稱將稱為 SSLServer1,從中我們將建立與 MySQL 服務器的安全 SSL 連接的計算機的名稱將稱為 SSLServer2。
檢查 SSL 狀態 (Checking status of SSL)
因此,讓我們開始為 SSLServer1 計算機上 MySQL 服務器配置 SSL。首先,讓我們檢查遠程 MySQL 服務器實例上 SSL 的當前狀態。
使用以下命令登錄到 MySQL 實例:
mysql -u root -p -h 127.0.0.1
輸入 root 用戶的密碼,然后按鍵盤上的 Enter 鍵。
登錄后,鍵入并執行以下命令:
SHOW VARIABLES LIKE ‘%ssl%’;
顯示變量,例如 %ssl%;
根據計算機上安裝 MySQL 版本,您可以獲得不同的結果。如果運行的是 MySQL 服務器 5.7.27 及以下版本,則可能會得到以下結果:
可以看出,禁用了 have_openssl 和 have_ssl 變量。要確認當前連接未使用 SSL,請執行以下操作:
\s
\ s
or
要么狀態
輸出結果將類似于以下內容:
————–
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
當前數據庫:
當前用戶:root @ localhost
SSL:未使用
當前尋呼機:標準輸出
使用 outfile:”
使用定界符:;
服務器版本:5.7.29-0ubuntu0.18.04.1(Ubuntu)
協議版本:10
連接:通過 TCP / IP 的 127.0.0.1
服務器字符集:latin1
DB 字符集:latin1
客戶端特征集:utf8
康涅狄格州字符集:utf8
TCP 端口:3306
正常運行時間:10 分鐘 10 秒
線程:1 問題:6 慢查詢:0 打開:106 刷新表:1 打開表:每秒平均查詢 99 次:0.009
——————
從上面可以看出,該連接未使用 SSL。
確定當前與 MySQL 服務器的連接是否使用加密的另一種方法是檢查 Ssl_cipher 狀態變量的會話值:
SHOW SESSION STATUS LIKE ‘Ssl_cipher’;
顯示會話狀態,例如“Ssl_cipher”;
如果該值為空,則表明當前連接未使用加密:
在當前連接使用加密的情況下,該值將不會為空,如下所示:
注意:我使用的是 MySQL 5.7.29 版本,默認情況下啟用了 SSL,但在此示例中,我通過修改 my.cnf 文件以顯示 SSL 的禁用狀態來禁用 SSL:
在此配置文件中,我輸入了以下命令來禁用 SSL:
skip_ssl
skip_ssl
要啟用 SSL 并生成適當的證書和密鑰文件,可以使用 mysql_ssl_rsa_setup 實用程序:
sudo mysql_ssl_rsa_setup –uid=mysql
sudo mysql_ssl_rsa_setup –uid = mysql
默認情況下,MySQL 在以下位置存儲 SSL 證書:
/ var / lib / mysql
讓我們通過執行以下命令進行檢查:
sudo find /var/lib/mysql/ -name ‘*.pem’
但是,如果您安裝了 MySQL 5.7.28 及更高版本,則將在 / var / lib / mysql 位置上自動生成 SSL 認證,并在啟動 MySQL 時啟用 SSL 加密:
配置遠程 MySQL 服務器 (Configuring remote MySQL server)
既然我們已經啟用了 SSL,那么 MySQL 配置的下一步就是啟用(允許)遠程連接。默認情況下,MySQL 配置為偵聽來自其安裝機器的連接,并且僅接受來自本地主機 AKA 127.0.0.1 IP 地址的連接。
如果現在嘗試從客戶端計算機(SSLServer2)連接到位于 SSLServer1 計算機上 MySQL,我們可能會收到以下錯誤消息:
ERROR 2003 (HY000): Can’t connect to MySQL server on (111)
錯誤 2003(HY000):無法連接到(111)上 MySQL 服務器
要允許從任何遠程 IP 地址連接到 MySQL 服務器,請在 MySQL 配置文件 /etc/mysql/my.cnf 中添加以下內容:
現在,重新啟動 MySQL 服務,以使更改生效:
當我們再次嘗試連接到遠程 MySQL 服務器時,我們將收到一條錯誤消息:
當前,所有 MySQL 用戶都配置為從 MySQL 服務器本地連接。要連接到遠程 MySQL 服務器,您將需要使用客戶端計算機的 IP 地址創建一個新用戶,在本例中,我們需要 SSLServer2 計算機的 IP 地址。
要在終端類型中查看機器的 IP 地址(SSLServer2),然后執行以下命令:
Ifconfig
現在,當我們獲得所有必要的信息時,讓我們通過添加 REQUIRE SSL 子句,創建一個可以通過安全連接連接到遠程 MySQL 的用戶:
CREATE USER ‘SSL_USER’@
CREATE USER SSL_USER @
創建用戶后,讓我們授予他訪問所有遠程 MySQL 數據庫的所有權限。
執行以下命令:
GRANT ALL ON *.* TO ‘SSL_USER’@
要立即應用這些設置,請執行以下操作:
FLUSH PRIVILEGES;
在 SSLServer1 計算機上還需要完成的另一件事是將 require_secure_transport 選項添加到 my.cnf 文件并將其設置為 ON。
這要求使用 SSL 建立所有遠程連接。
之后,重新啟動 MySQL 服務,以應用新設置:
sudo service mysql restart
這樣,我們就允許 SSL_USER 從遠程位置進行連接。為了確認,讓我們用 SSL_USER 連接從 SSLServer2 機。
在 SSLServer2 計算機上,打開終端并執行以下命令:
mysql -u SSL_USER -p -h
輸入 SSL_USER 的密碼后,您將能夠連接到位于 SSLServer1 機器上的遠程 MySQL 服務器:
現在,鍵入 \ s 確認服務器狀態并確認您正在使用安全連接:
要確認 MySQL 服務器僅接受安全連接并拒絕不安全,請嘗試使用相同的憑據進行連接,但這一次在連接字符串中添加–ssl-mode = disabled 命令:
mysql -u SSL_USER -p -h –ssl-mode=disabled
執行后,可能會出現以下錯誤:
錯誤 1045(28000):用戶 SSL_USER @ SSLServer2_IP 的訪問被拒絕(使用密碼:是)
到目前為止,您已經為 MySQL 服務器設置了由本地生成的證書頒發機構(CA)簽名的 SSL 證書,這足以為傳入的連接提供安全的加密。
為了提供 SSLServer1 和 SSLServer2 計算機之間的完全信任關系,將從 SSLServer1 計算機復制帶有客戶端證書和客戶端密鑰的 CA 證書到 SSLServer2 計算機,還將 SSL_USER 修改為需要信任證書。
首先在 SSLServer2 機器上,創建一個文件夾,將在其中放置客戶端文件:
mkdir ~/ssl-client
使用 SCP 或 SFTP 將傳輸文件從一臺機器安全保護到另一臺機器上,或僅使用 cat 命令從 SSLServer1 機器上的 CA 證書,client-cert.pem 和 client-key.pem 文件中讀取和復制內容,然后創建這些文件并將內容粘貼到 SSLServer2 計算機上:
復制適當的文件后,更改 SSL_USER,并放置 REQUIRE X509 子句:
ALTER USER ‘SSL_USER’@
現在,當使用 SSL_USER 用戶連接到遠程 MySQL 服務器時,必須指定–ssl-key 和–ssl-cert 選項,也建議這樣做,但不需要指定–ssl-ca 選項。如果我們在未指定客戶端證書的情況下連接到遠程 MySQL 服務器:
mysql -u SSL_USER1 -p -h
可能會出現以下錯誤消息:
ERROR 1045 (28000): Access denied for user ‘SSL_USER’@’SLLServer2_IP’ (using password: YES)
讓我們通過在連接字符串中添加–ssl-ca,–ssl-cert 和–ssl-key 選項來指定適當的客戶端證書,以指向?/ ssl-client 目錄下的文件:
mysql -u SSL_USER -p -h SSLServer1_IP –ssl-ca =?/ ssl-client / ca.pem –ssl-cert =?/ ssl-client / client-cert.pem
按下 Enter 鍵后,您應該成功連接到遠程 MySQL 服務器:
每次要連接到遠程 MySQL 服務器時,使用–ssl-ca,–ssl-cert 和–ssl-key 選項并輸入相關文件的路徑是一項整齊且耗時的工作,因此讓我們進行優化和改進連接可用性。
在 SSLServer2 機器中,如果 my.cnf 文件在以下位置不存在:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
我們可以在主目錄中創建一個:
~/.my.cnf:
執行以下命令:
nano ~/.my.cnf
并在.my.cnf 文件中粘貼并保存以下內容:
現在,您可以連接到遠程 MySQL 服務器,而無需在連接字符串中添加–ssl-ca,–ssl-cert 和–ssl-key 選項:
關于“怎么使用 SSL 連接到遠程 MySQL 服務器”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么使用 SSL 連接到遠程 MySQL 服務器”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道。