今天小编给大家分享一下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 -u root -p -h 127.0.0.1
MysqL -u根-p -h 127.0.0.1
登录后,键入并执行以下命令:
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”;
如果该值为空,则表明当前连接未使用加密:
在当前连接使用加密的情况下,该值将不会为空,如下所示:
在此配置文件中,我输入了以下命令来禁用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)
当前,所有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
[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服务器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程之家行业资讯频道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。