使用 SSL 与 MySQL 建立安全连接

MySQL 启用 SSL

首先,使用以下命令查看当前 MySQL 是否已启用 SSL:

show variables like '%ssl%';

查看结果中 have_opensslhave_ssl 的值。如果为 DISABLED,表示 SSL 未启用。接下来,可以按照以下步骤开启 SSL:

1. 生成 SSL 证书

要启用 SSL,首先需要生成 SSL 证书和密钥文件。可以使用 mysql_ssl_rsa_setup 命令来快速生成:

# 使用 --datadir 参数指定证书和密钥的存放位置,注意确保目录的存在
mysql_ssl_rsa_setup --datadir=/var/lib/mysql/ssl

此命令将在指定目录(如 /var/lib/mysql/ssl)下生成以下文件:

  • ca.pem:CA 证书
  • server-cert.pem 和 server-key.pem:服务器证书和密钥
  • client-cert.pem 和 client-key.pem:客户端证书和密钥

注意:确保生成的 SSL 证书和密钥文件可被 MySQL 访问。

2. 配置 MySQL

生成证书后,需要在 MySQL 配置文件中启用 SSL 支持。编辑 MySQL 配置文件(通常是 my.cnf 或 my.conf):

# 在 [mysqld] 启用 SSL
[mysqld]
ssl-ca = /var/lib/mysql/ssl/ca.pem
ssl-cert = /var/lib/mysql/ssl/server-cert.pem
ssl-key = /var/lib/mysql/ssl/server-key.pem

# 可选:在 [client] 配置客户端默认使用 SSL 
[client]
ssl-ca = /var/lib/mysql/ssl/ca.pem
ssl-cert = /var/lib/mysql/ssl/client-cert.pem
ssl-key = /var/lib/mysql/ssl/client-key.pem

3. 重启 MySQL 服务

在修改配置文件后,重启 MySQL 以应用更改:

systemctl restart mysql

重启完成后,可以再次使用 show variables like '%ssl%'; 命令确认 SSL 是否成功启用。

客户端使用 SSL 连接 MySQL

在客户端连接数据库时,需指定 SSL 相关的参数。以下是带有 SSL 选项的连接字符串示例:

mysql://username:password@host/dbname?ssl-ca=/var/lib/mysql/ssl/ca.pem&ssl-cert=/var/lib/mysql/ssl/client-cert.pem&ssl-key=/var/lib/mysql/ssl/client-key.pem