共计 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 行业资讯频道。