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