共計 5735 個字符,預計需要花費 15 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 Ubuntu 上怎么使用 SSL 遠程連接 MySQL 服務器的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
先決條件 (Prerequisite)
對于本文,需要安裝兩個 Linux Ubuntu 18.04 實例。
在其中一臺 Ubuntu 計算機上,使用“如何在 Ubuntu 18.04 上安裝 MySQL”頁面中的指南安裝 MySQL 并配置 root 用戶。
在第二臺計算機上,使用以下命令安裝 MySQL 客戶端:
sudo apt install mysql-client
sudo apt 安裝 mysql 客戶端
否則,當嘗試連接到遠程 MySQL 服務器時,您將收到以下消息:
sudo: mysql: command not found
sudo:mysql:找不到命令
在本文中,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
mysql - u 根 -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
要么
status
狀態
輸出結果將類似于以下內容:
————–
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’
sudo 查找 / 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 中添加以下內容:
bind-address = 0.0.0.0
綁定地址 = 0.0.0.0
現在,重新啟動 MySQL 服務,以使更改生效:
sudo service mysql restart
sudo 服務 mysql 重新啟動
當我們再次嘗試連接到遠程 MySQL 服務器時,我們將收到一條錯誤消息:
ERROR 1045 (28000): Access denied for user (using password: YES)
錯誤 1045(28000):拒絕用戶訪問(使用密碼:是)
當前,所有 MySQL 用戶都配置為從 MySQL 服務器本地連接。要連接到遠程 MySQL 服務器,您將需要使用客戶端計算機的 IP 地址創建一個新用戶,在本例中,我們需要 SSLServer2 計算機的 IP 地址。
要在終端類型中查看機器的 IP 地址(SSLServer2),然后執行以下命令:
Ifconfig
Ifconfig
現在,當我們獲得所有必要的信息時,讓我們通過添加 REQUIRE SSL 子句,創建一個可以通過安全連接連接到遠程 MySQL 的用戶:
CREATE USER‘SSL_USER’@
CREATE USER SSL_USER @
創建用戶后,讓我們授予他訪問所有遠程 MySQL 數據庫的所有權限。
執行以下命令:
GRANT ALL ON *.* TO‘SSL_USER’@
全部授予 *。* TO SSL_USER @
要立即應用這些設置,請執行以下操作:
FLUSH PRIVILEGES;
沖洗特權;
在 SSLServer1 計算機上還需要完成的另一件事是將 require_secure_transport 選項添加到 my.cnf 文件并將其設置為 ON。
這要求使用 SSL 建立所有遠程連接。
之后,重新啟動 MySQL 服務,以應用新設置:
sudo service mysql restart
sudo 服務 mysql 重新啟動
這樣,我們就允許 SSL_USER 從遠程位置進行連接。為了確認,讓我們用 SSL_USER 連接從 SSLServer2 機。
在 SSLServer2 計算機上,打開終端并執行以下命令:
mysql -u SSL_USER -p -h
mysql -u SSL_USER -p -h
輸入 SSL_USER 的密碼后,您將能夠連接到位于 SSLServer1 機器上的遠程 MySQL 服務器:
現在,鍵入 \ s 確認服務器狀態并確認您正在使用安全連接:
要確認 MySQL 服務器僅接受安全連接并拒絕不安全,請嘗試使用相同的憑據進行連接,但這一次在連接字符串中添加–ssl-mode = disabled 命令:
mysql -u SSL_USER -p -h –ssl-mode=disabled
mysql -u SSL_USER -p -h –ssl-mode = 禁用
執行后,可能會出現以下錯誤:
ERROR 1045 (28000): Access denied for user‘SSL_USER’@’SSLServer2_IP’(using password: YES)
錯誤 1045(28000):用戶 SSL_USER @ SSLServer2_IP 的訪問被拒絕(使用密碼:是)
到目前為止,您已經為 MySQL 服務器設置了由本地生成的證書頒發機構(CA)簽名的 SSL 證書,這足以為傳入的連接提供安全的加密。
為了提供 SSLServer1 和 SSLServer2 計算機之間的完全信任關系,將從 SSLServer1 計算機復制帶有客戶端證書和客戶端密鑰的 CA 證書到 SSLServer2 計算機,還將 SSL_USER 修改為需要信任證書。
首先在 SSLServer2 機器上,創建一個文件夾,將在其中放置客戶端文件:
mkdir ~/ssl-client
mkdir?/ ssl-client
使用 SCP 或 SFTP 將傳輸文件從一臺機器安全保護到另一臺機器上,或僅使用 cat 命令從 SSLServer1 機器上的 CA 證書,client-cert.pem 和 client-key.pem 文件中讀取和復制內容,然后創建這些文件并將內容粘貼到 SSLServer2 計算機上:
復制適當的文件后,更改 SSL_USER,并放置 REQUIRE X509 子句:
ALTER USER‘SSL_USER’@
ALTER USER SSL_USER @
現在,當使用 SSL_USER 用戶連接到遠程 MySQL 服務器時,必須指定–ssl-key 和–ssl-cert 選項,也建議這樣做,但不需要指定–ssl-ca 選項。如果我們在未指定客戶端證書的情況下連接到遠程 MySQL 服務器:
mysql -u SSL_USER1 -p -h
mysql -u SSL_USER1 -p -h
可能會出現以下錯誤消息:
ERROR 1045 (28000): Access denied for user‘SSL_USER’@’SLLServer2_IP’(using password: YES)
錯誤 1045(28000):用戶 SSL_USER @ SLLServer2_IP 的訪問被拒絕(使用密碼:是)
讓我們通過在連接字符串中添加–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 –ssl-key=~/ssl-client/client-key.pem
mysql -u SSL_USER -p -h SSLServer1_IP –ssl-ca =?/ ssl-client / ca.pem –ssl-cert =?/ ssl-client / client-cert.pem –ssl-key =?/ ssl-client / 客戶端密鑰
按下 Enter 鍵后,您應該成功連接到遠程 MySQL 服務器:
每次要連接到遠程 MySQL 服務器時,使用–ssl-ca,–ssl-cert 和–ssl-key 選項并輸入相關文件的路徑是一項整齊且耗時的工作,因此讓我們進行優化和改進連接可用性。
在 SSLServer2 機器中,如果 my.cnf 文件在以下位置不存在:
/etc/my.cnf
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
/usr/etc/my.cnf
~/.my.cnf
?/ .my.cnf
我們可以在主目錄中創建一個:
~/.my.cnf:
?/ .my.cnf:
執行以下命令:
nano ~/.my.cnf
納米?/ .my.cnf
并在.my.cnf 文件中粘貼并保存以下內容:
[client]
ssl-ca = ~/ssl-client/ca.pem
ssl-cert = ~/ssl-client/client-cert.pem
ssl-key = ~/ssl-client/client-key.pem
[客戶]
ssl-ca =?/ ssl-client / ca.pem
ssl-cert =?/ ssl-client / client-cert.pem
ssl-key =?/ ssl-client / client-key.pem
現在,您可以連接到遠程 MySQL 服務器,而無需在連接字符串中添加–ssl-ca,–ssl-cert 和–ssl-key 選項:
mysql -u SSL_USER1 -p -h
mysql -u SSL_USER1 -p -h
以上就是“Ubuntu 上怎么使用 SSL 遠程連接 MySQL 服務器”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。