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

MySQL是世界上最流行的开源关系数据库管理系统。 虽然现代包管理器已经减少了启动和运行MySQL的一些摩擦,但是在安装它之后还应该执行一些进一步的配置。 花费一些额外时间的最重要方面之一是安全性。

默认情况下,MySQL配置为仅接受本地连接,或者来自安装MySQL的同一台机器的连接。 如果您需要从远程位置访问MySQL数据库,那么安全地执行此操作非常重要。 在本指南中,我们将演示如何在Ubuntu 18.04上配置MySQL以接受使用SSL/TLS加密的远程连接。

准备

要遵循本教程,您将需要两台 Ubuntu 16.04服务器。我们将使用一个作为MySQL服务器,另一个作为客户端。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。

在第一台机器上,您应该安装并配置MySQL服务器。按照我们的四步教你搭建保护MySQL服务器!教程来安装和配置软件。

在第二台计算机上,安装MySQL客户端软件包。您可以通过输入以下内容来更新apt软件包索引并安装必要的软件:

sudo apt-get update sudo apt-get install mysql-client

当您的服务器和客户端准备就绪后,请继续。

检查当前的SSL / TLS状态

在开始之前,我们可以在MySQL服务器实例上检查SSL / TLS的当前状态。

使用root 用户登录MySQL会话。我们将使用-h指定IPv4本地环回接口,以强制客户端与TCP连接。这将允许我们检查TCP连接的SSL状态:

mysql -u root -p -h 127.0.0.1

系统将提示您输入在安装过程中输入MySQL root密码。之后,您将进入交互式MySQL会话。

输入以下内容显示SSL / TLS变量的状态:

SHOW VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+ 9 rows in set (0.01 sec)

have_openssl和have_ssl变量都标记为DISABLED。这意味着SSL功能已编译到服务器中,但尚未启用。

检查我们当前连接的状态以确认:

\s -------------- mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper ​ Connection id: 30 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.17-0ubuntu0.16.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: 3 hours 38 min 44 sec ​ Threads: 1 Questions: 70 Slow queries: 0 Opens: 121 Flush tables: 1 Open tables: 40 Queries per second avg: 0.005 --------------

如上面的输出所示,SSL尚未加密我们的链接

完成后关闭当前的MySQL会话:

exit

现在我们可以开始为SSL配置MySQL以保护我们的连接。

生成SSL / TLS证书和密钥

要启用与MySQL的SSL连接,我们首先需要生成相应的证书和密钥文件。MySQL 5.7及更高版本提供了一个被调用的程序mysql_ssl_rsa_setup来简化此过程。Ubuntu 16.04具有兼容的MySQL版本,因此我们可以使用此命令生成必要的文件。

这些文件将在MySQL的数据目录中创建,位于/var/lib/mysql。我们需要MySQL进程能够读取生成的文件所以我们将mysql作为应该拥有生成文件的用户传递:

sudo mysql_ssl_rsa_setup --uid=mysql

将产生如下所示的输出:

Generating a 2048 bit RSA private key ...................................+++ .....+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key ......+++ .................................+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++ writing new private key to 'client-key.pem' -----

输入以下命令检查生成的文件:

sudo find /var/lib/mysql -name '*.pem' -ls 256740 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/ca-key.pem<^> 256739 4 -rw-r--r-- 1 mysql mysql 451 Mar 17 17:24 /var/lib/mysqlsql/public_key.pem<^> 256741 4 -rw------- 1 mysql mysql 1679 Mar 17 17:24 /var/lib/mysqlsql/client-key.pem<^> 256737 4 -rw-r--r-- 1 mysql mysql 1074 Mar 17 17:24 /var/lib/mysqlsql/ca.pem<^> 256743 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysqlsql/client-cert.pem<^> 256736 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/private_key.pem<^> 256738 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/server-key.pem<^>

最后一列显示生成的文件名。并表示生成的文件具有正确的用户和组所有权。

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

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