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

在内部,您可以使用CREATE USER命令创建新的远程用户。我们将在用户规范的主机部分中使用客户端计算机的IP地址来限制与该计算机的连接。对于将来关闭require_secure_transport选项的某些冗余,我们还将在帐户创建期间指定此用户通过包含REQUIRE SSL子句来要求SSL:

CREATE USER 'remote_user'@'mysql_client_IP' IDENTIFIED BY 'password' REQUIRE SSL;

接下来,为他们应该有权访问的数据库或表授予新用户权限。为了演示,我们将创建一个example数据库并赋予新的用户所有权:

CREATE DATABASE example; GRANT ALL ON example.* TO 'remote_user'@'mysql_client_IP';

接下来,刷新权限立即应用这些设置:

FLUSH PRIVILEGES;

完成后退出到shell:

exit

我们的服务器设置为允许连接到我们的远程用户。

测试远程连接

MySQL客户端计算机上,进行测试以确保您可以成功连接到服务器。使用-u选项指定远程用户以及-h选项指定MySQL服务器IP地址:

mysql -u remote_user -p -h mysql_server_IP

指定密码后,您将登录到远程服务器。

检查以确保您的连接安全:

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

退出到shell:

exit

接下来,尝试不安全地连接:

mysql -u remote_user -p -h mysql_server_IP --ssl-mode=disabled

提示您输入密码后,应拒绝您的连接:

ERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_server_IP' (using password: YES)

它显示允许SSL连接,而拒绝未加密的连接。此时,我们的MySQL服务器已配置为安全地接受远程连接。如果这满足您的安全要求,您可以在这里停止,但我们可以实施一些额外的部分来进一步增强我们的安全性和信任。

配置MySQL连接的验证(可选)

目前,我们的MySQL服务器配置了由本地生成的证书颁发机构(CA)签名的SSL证书。服务器的证书和密钥对足以为传入连接提供加密。

但是,我们目前没有利用证书颁发机构可以提供的信任关系。通过将CA证书分发给客户端以及客户端证书和密钥,双方都可以提供其证书由相互信任的证书颁发机构签名的证明。这有助于防止恶意服务器的欺骗性连接。

为了实现这个额外的可选安全措施,我们需要:

将适当的SSL文件传输到客户端计算机

创建客户端配置文件

改变我们的远程用户以获得可信证书

将客户端证书传输到客户端计算机

首先,我们需要从MySQL服务器获取MySQL CA和客户端证书文件,并将它们放在MySQL客户端上。

首先在您将用于连接的用户的主目录中的MySQL客户端上创建一个目录。叫这个client-ssl:

mkdir ~/client-ssl

我们应该锁定对此目录的访问权限,以便只有当前用户才能访问它:

chmod 700 ~/client-ssl

现在,我们可以将证书信息复制到新目录。

MySQL服务器计算机上,输入以下内容显示CA证书的内容:

sudo cat /var/lib/mysql/ca.pem -----BEGIN CERTIFICATE----- ​ . . . ​ -----END CERTIFICATE-----

将整个输出(包括BEGIN CERTIFICATE和END CERTIFICATE行)复制到剪贴板。

MySQL客户端上,在新目录中创建一个具有相同名称的文件:

nano ~/client-ssl/ca.pem

在里面,粘贴剪贴板中复制的证书内容。完成后保存并关闭文件。

接下来,在MySQL服务器上显示客户端证书:

sudo cat /var/lib/mysql/client-cert.pem -----BEGIN CERTIFICATE----- ​ . . . ​ -----END CERTIFICATE-----

再次,将内容复制到剪贴板。

在目录中的MySQL客户端上打开一个具有相同名称的client-ssl文件:

nano ~/client-ssl/client-cert.pem

粘贴剪贴板中的内容。保存并关闭文件。

最后,在MySQL服务器上显示客户端密钥文件的内容:

sudo cat /var/lib/mysql/client-key.pem -----BEGIN RSA PRIVATE KEY----- ​ . . . ​ -----END RSA PRIVATE KEY-----

将显示的内容(包括第一行和最后一行)复制到剪贴板。

MySQL客户端上,打开目录中具有相同名称的client-ssl文件:

nano ~/client-ssl/client-key.pem

粘贴剪贴板中的内容。保存并关闭文件。客户端计算机现在应具有访问MySQL服务器所需的所有凭据。接下来,我们需要改变我们的远程用户。

需要来自可信CA的远程用户证书

目前,MySQL客户端具有可用于在连接时向服务器提供其证书的文件。但是,服务器仍未设置为要求来自受信任CA的客户端证书。

要更改此设置,请在MySQL服务器上再次登录MySQL root帐户:

mysql -u root -p

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

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