如何在Ubuntu 18.04上为MySQL配置SSL/TLS(2)

这些文件是证书颁发机构(以“ca”开头),MySQL服务器进程(以“server”开头)和MySQL客户端(以“client”开头)的密钥和证书对。

在MySQL服务器上启用SSL连接

MySQL版本将在服务器启动时在MySQL数据目录中查找相应的证书文件。因此,我们实际上不需要修改MySQL配置来启用SSL。

我们可以改为重启MySQL服务:

sudo systemctl restart mysql

重新启动后,使用与以前相同的命令打开新的MySQL会话。如果服务器支持,MySQL客户端将自动尝试使用SSL进行连接:

mysql -u root -p -h 127.0.0.1

我们来看看上次请求的相同信息。检查SSL相关变量的值:

SHOW VARIABLES LIKE '%ssl%'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+ 9 rows in set (0.00 sec)

这次have_openssl和have_ssl变量读取“YES”而不是“DISABLED”。此外,ssl_ca,ssl_cert,和ssl_key变量已填入我们产生的相关证书的名称。

接下来,再次检查连接详细信息:

\s -------------- . . . SSL: Cipher in use is DHE-RSA-AES256-SHA . . . Connection: 127.0.0.1 via TCP/IP . . . --------------

这次,将显示特定的SSL加密方式,表示正在使用SSL来保护我们的连接。

退出到shell:

exit

我们的服务器现在能够使用加密,但需要一些额外的配置才能允许远程访问并强制使用安全连接。

为远程客户端配置安全连接

现在我们已在服务器上使用SSL,我们可以开始配置安全远程访问。为此,我们需要:

要求SSL用于远程连接

绑定到公共接口

为远程连接创建MySQL用户

调整防火墙规则以允许外部连接

使用强制SSL配置远程访问

目前,MySQL服务器配置为接受来自客户端的SSL连接。但是,如果客户端请求,它仍将允许未加密的连接。

我们可以通过打开require_secure_transport选项来解决这个问题。这要求所有连接都使用SSL。因此对远程用户开放的唯一连接选项将使用SSL。

要启用此设置,请在文本编辑器中打/etc/mysql/my.cnf开文件:

sudo nano /etc/mysql/my.cnf

在里面,将有两个!includedir指令用于获取其他配置文件。我们需要这些行下面放置我们自己的配置以便它们覆盖任何冲突的设置。

首先创建一个[mysqld]部分来定位MySQL服务器进程。将require_secure_transport设置为ON:

. . . ​ !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ ​ [mysqld] # Require clients to connect either using SSL # or through a local socket file require_secure_transport = ON

该行是强制实施安全连接所需的唯一设置。

默认情况下,MySQL配置为仅侦听源自本地计算机的连接。要将其配置为侦听远程连接,我们可以将其bind-address设置为不同的接口。

要允许MySQL接受任何接口上的连接,我们可以将bind-address设置为“0.0.0.0”:

. . . ​ !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ ​ [mysqld] # Require clients to connect either using SSL # or through a local socket file require_secure_transport = ON bind-address = 0.0.0.0

完成后保存并关闭文件。

接下来,重新启动MySQL以应用新设置:

sudo systemctl restart mysql

通过输入以下内容验证MySQL是否正在侦听“0.0.0.0”而不是“127.0.0.1”:

sudo netstat -plunt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4330/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1874/sshd tcp6 0 0 :::22 :::* LISTEN 1874/sshd

上面输出中的“0.0.0.0”表示MySQL正在侦听所有可用接口上的连接。

接下来,我们需要通过防火墙允许MySQL连接。输入以下内容创建:

sudo ufw allow mysql Rule added Rule added (v6)

远程连接尝试现在应该能够到达我们的MySQL服务器。

配置远程MySQL用户

MySQL服务器现在正在侦听远程连接,但我们目前没有配置任何可以从外部计算机连接的用户。以root用户身份登录MySQL 开始:

mysql -u root -p

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9fa643eecc4883dcd7c0c38def3e98b8.html