MySQL 开启 SSL 加密及生成证书完整步骤

Felix
Felix
发布时间:2026-10-14| 6人浏览过
原创

为保障数据库通信安全,本文将详细介绍如何在 MySQL 服务器端利用 OpenSSL 工具链生成 CA 证书、服务器证书及客户端证书,并通过修改配置文件启用 SSL 连接,最后演示如何携带证书进行安全登录。

准备条件

在执行以下操作前,请确保 Linux 服务器上已安装 openssl 工具,并拥有 root 权限或 sudo 权限。建议先在测试环境中验证流程,避免影响生产环境。

操作步骤

第1步:检查当前 SSL 状态

首先确认 MySQL 是否支持并启用了 SSL。

  1. 登录 MySQL 命令行:
mysql -u root -p
  1. 执行查询查看 SSL 相关变量:
SHOW VARIABLES LIKE '%ssl%';

观察结果:

  • have_openssl 和 have_ssl:若显示 YES 则表示底层支持且服务已加载;若为 DISABLED 或 NO,则需要后续配置。
  • ssl_ca, ssl_cert, ssl_key:这些字段若为空,说明未指定证书路径。

第2步:在 my.cnf 中启用 SSL 参数

为了让 MySQL 服务识别 SSL 配置,需要在配置文件末尾添加路径指向(即使暂时不生成证书,也可以先预留路径或指向后续生成的文件)。

  1. 编辑 MySQL 配置文件:
sudo vi /etc/mysql/my.cnf  # 路径可能因系统而异,如 /etc/my.cnf
  1. 在 [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 上生成即可。

  1. 创建目录:
mkdir -p /etc/mysql/newcerts
cd /etc/mysql/newcerts
  1. 生成 CA 私钥:
openssl genrsa 2048 > ca-key.pem
  1. 生成 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 签名。

  1. 生成服务器私钥:
openssl genrsa 2048 > server-key.pem
  1. 生成服务器证书请求文件(CSR):
openssl req -new -key server-key.pem -out server-req.pem

关键参数:Common Name (CN) 必须与 MySQL 服务器的主机名或 IP 地址完全一致,否则客户端验证时会报错。

  1. 由 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 连接,则需生成客户端证书。过程类似服务器证书。

  1. 生成客户端私钥:
openssl genrsa 2048 > client-key.pem
  1. 生成客户端 CSR:
openssl req -new -key client-key.pem -out client-req.pem

同样注意 Common Name 可设为连接该服务器的客户端主机名。

  1. 由 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 安全防护的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。