您好,登錄后才能下訂單哦!
今天小編給大家分享一下Ubuntu上怎么使用SSL遠程連接MySQL服務器的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
對于本文,需要安裝兩個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 。
因此,讓我們開始為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加密:
既然我們已經啟用了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服務器”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。