这些文件是证书颁发机构(以“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