MySQL 开启 SSL 加密及生成证书完整步骤
为保障数据库通信安全,本文将详细介绍如何在 MySQL 服务器端利用 OpenSSL 工具链生成 CA 证书、服务器证书及客户端证书,并通过修改配置文件启用 SSL 连接,最后演示如何携带证书进行安全登录。
准备条件
在执行以下操作前,请确保 Linux 服务器上已安装 openssl 工具,并拥有 root 权限或 sudo 权限。建议先在测试环境中验证流程,避免影响生产环境。
操作步骤
第1步:检查当前 SSL 状态
首先确认 MySQL 是否支持并启用了 SSL。
- 登录 MySQL 命令行:
mysql -u root -p
- 执行查询查看 SSL 相关变量:
SHOW VARIABLES LIKE '%ssl%';
观察结果:
have_openssl和have_ssl:若显示 YES 则表示底层支持且服务已加载;若为 DISABLED 或 NO,则需要后续配置。ssl_ca,ssl_cert,ssl_key:这些字段若为空,说明未指定证书路径。
第2步:在 my.cnf 中启用 SSL 参数
为了让 MySQL 服务识别 SSL 配置,需要在配置文件末尾添加路径指向(即使暂时不生成证书,也可以先预留路径或指向后续生成的文件)。
- 编辑 MySQL 配置文件:
sudo vi /etc/mysql/my.cnf # 路径可能因系统而异,如 /etc/my.cnf
- 在 [mysqld] 段落下添加或确保包含以下行:
[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
注意:如果尚未生成证书,可以先注释掉具体文件路径,或者先生成好再取消注释。重启 MySQL 服务使配置生效:
sudo service mysql restart
第3步:创建证书目录并生成 CA 证书
选择一台机器作为证书颁发机构(CA),通常在 Server 上生成即可。
- 创建目录:
mkdir -p /etc/mysql/newcerts
cd /etc/mysql/newcerts
- 生成 CA 私钥:
openssl genrsa 2048 > ca-key.pem
- 生成 CA 自签名证书:
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem
执行时按提示填写信息(Country, State, Organization, Common Name 等)。其中 Common Name (CN) 建议填写 CA 的名称或标识。
第4步:生成服务器证书
用于标识 MySQL 服务器身份,需生成私钥、请求文件并由 CA 签名。
- 生成服务器私钥:
openssl genrsa 2048 > server-key.pem
- 生成服务器证书请求文件(CSR):
openssl req -new -key server-key.pem -out server-req.pem
关键参数:Common Name (CN) 必须与 MySQL 服务器的主机名或 IP 地址完全一致,否则客户端验证时会报错。
- 由 CA 签署服务器证书:
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
第5步:生成客户端证书
如需强制客户端使用 SSL 连接,则需生成客户端证书。过程类似服务器证书。
- 生成客户端私钥:
openssl genrsa 2048 > client-key.pem
- 生成客户端 CSR:
openssl req -new -key client-key.pem -out client-req.pem
同样注意 Common Name 可设为连接该服务器的客户端主机名。
- 由 CA 签署客户端证书:
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
第6步:分发文证到服务器和客户端
- 服务端需要的文件:
ca-cert.pem(CA公钥),server-cert.pem,server-key.pem。将这些文件复制到服务器指定目录(如/etc/mysql/ssl/),并确保只有 root 可读私钥文件(chmod 400)。 - 客户端需要的文件:
ca-cert.pem(CA公钥),client-cert.pem,client-key.pem。将这些文件复制到客户端机器指定目录。
完成判断与登录验证
确认文件权限正确且路径无误后,尝试通过命令行登录以验证 SSL 是否生效。
mysql -u your_user -p --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem
登录成功后,再次执行 SHOW VARIABLES LIKE '%ssl%';,观察 ssl_cipher 是否有值(非空),且 Ssl_Cipher 不为空即表示 SSL 连接已建立。
以上就是 MySQL 通过 SSL 方式生成秘钥及使用连接的详细内容,更多关于 MySQL 安全防护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









