🗣 Wd提问: MySQL SSL连接
🤖 Ai回答: 在 MySQL 中启用和使用 SSL 连接可以增强客户端与服务器之间的通信安全性,防止数据被窃听或篡改。以下是配置和使用 MySQL SSL 连接的完整指南:
一、检查 MySQL 是否支持 SSL
首先确认你的 MySQL 服务器是否编译支持 SSL:
sql
SHOW VARIABLES LIKE 'have_ssl';
如果返回值为 `YES`,表示支持 SSL。
同时查看当前 SSL 状态:
sql
SHOW STATUS LIKE 'Ssl%';
若 `Ssl_version` 有值(如 `TLSv1.2`),说明当前连接已使用 SSL。
二、生成 SSL 证书和密钥(自签名)
如果你已有 CA 证书或希望使用正式证书,可跳过此步。
1、创建证书目录
bash
mkdir -p /var/lib/mysql/ssl
cd /var/lib/mysql/ssl
2、生成 CA 证书
bash
openssl genrsa 2048 ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem
填写国家、组织等信息,Common Name 可填 `MySQL CA`
3、生成服务器证书请求
bash
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem 移除密码保护
openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
4、生成客户端证书(可选,用于双向认证)
bash
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem
5、验证证书
bash
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
应显示 `OK`
三、配置 MySQL 使用 SSL
编辑 MySQL 配置文件(通常是 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`):
ini
[mysqld]
ssl-ca=/var/lib/mysql/ssl/ca-cert.pem
ssl-cert=/var/lib/mysql/ssl/server-cert.pem
ssl-key=/var/lib/mysql/ssl/server-key.pem
可选:强制客户端使用 SSL(谨慎使用)
require_secure_transport = ON
重启 MySQL 服务:
bash
sudo systemctl restart mysql
或
sudo service mysqld restart
四、验证 SSL 是否启用
登录 MySQL:
sql
SHOW VARIABLES LIKE '%ssl%';
你应该看到类似:
have_openssl YES
have_ssl YES
ssl_ca /var/lib/mysql/ssl/ca-cert.pem
ssl_cert /var/lib/mysql/ssl/server-cert.pem
ssl_key /var/lib/mysql/ssl/server-key.pem
再检查当前连接状态:
sql
STATUS;
或
\status
在输出中查找:
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
或执行:
sql
SELECT ssl_type FROM information_schema.processlist WHERE id=connection_id();
如果返回 `SSL` 或 `X509`,说明当前连接是加密的。
五、客户端连接时启用 SSL
方法 1:命令行客户端(mysql)
bash
mysql ssl-mode=REQUIRED \
ssl-ca=/path/to/ca-cert.pem \
ssl-cert=/path/to/client-cert.pem \
ssl-key=/path/to/client-key.pem \
-u username -h hostname -p
`ssl-mode` 可选值:
`DISABLED` — 不使用 SSL
`PREFERRED` — 尽量使用 SSL,不强制
`REQUIRED` — 必须使用 SSL,否则失败
`VERIFY_CA` — 验证 CA 证书
`VERIFY_IDENTITY` — 验证主机名与证书匹配(最安全)
方法 2:在连接字符串中指定(如 PHP、Python 等)
Python 示例(mysql-connector-python):
python
import mysql.connector
config = {
'user': 'username',
'password': 'password',
'host': 'hostname',
'database': 'dbname',
'ssl_ca': '/path/to/ca-cert.pem',
'ssl_cert': '/path/to/client-cert.pem',
'ssl_key': '/path/to/client-key.pem',
'ssl_verify_cert': True,
}
conn = mysql.connector.connect(config)
PHP 示例(PDO):
php
$pdo = new PDO(
mysql:host=hostname;dbname=dbname,
username,
password,
[
PDO::MYSQL_ATTR_SSL_KEY = '/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT = '/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA = '/path/to/ca-cert.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT = true,
]
);
六、创建需要 SSL 的用户(可选)
你可以创建只允许通过 SSL 连接的用户:
sql
CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
FLUSH PRIVILEGES;
或者更严格地要求证书:
sql
CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE X509;
FLUSH PRIVILEGES;
七、常见问题排查
❌ 错误:SSL connection error
检查证书路径是否正确
确保权限允许 MySQL 读取证书文件(通常 `chmod 600 *.pem`)
检查 `ssl_mode` 设置是否匹配
使用 `openssl s_client -connect host:port -CAfile ca-cert.pem` 测试连接
❌ 错误:Access denied for user ..、(using password: YES)
用户未设置 `REQUIRE SSL`
客户端未提供正确的证书或未启用 SSL
八、生产环境建议
✅ 使用由可信 CA 签发的证书
✅ 强制使用 `VERIFY_IDENTITY` 模式
✅ 定期更新证书(避免过期)
✅ 启用 `require_secure_transport = ON`(如果所有客户端都支持 SSL)
✅ 监控日志中的 SSL 连接错误
总结
| 步骤 | 内容 |
| 1️⃣ | 确认 MySQL 支持 SSL |
| 2️⃣ | 生成或获取证书(CA + Server + Client) |
| 3️⃣ | 配置 MySQL 启用 SSL |
| 4️⃣ | 重启服务并验证 |
| 5️⃣ | 客户端连接时指定证书和模式 |
| 6️⃣ | (可选)创建仅限 SSL 的用户 |
✅ 成功标志**:客户端连接后执行 `STATUS` 显示 `SSL: Cipher in use...`,且 `SHOW STATUS LIKE 'Ssl%'` 中计数器增加。
如需进一步自动化或集成到容器/K8s 环境,也可使用脚本或 Helm Chart 自动部署证书。
如有具体错误或环境,请提供详细信息以便针对性解决。
📣 商家广告:





0
IP地址: 10.252.212.50
搜索次数: 0
提问时间: 2025-11-11 06:22:14
🛒 域名购买:
sbnjt.net
vg.gs
3.gx.cn
875.net.cn
62.gs
59.gold
61.chat
67.gs
v-z.net
58.gold
❓️ 热门提问:
克罗心香港
电脑主机没电
php的web服务器
国外日本服务器
win vps 便宜
flask服务器推送
好用的台服加速器
阿根廷vps
100m香港主机
华美云服务器
豌豆Ai站群搜索引擎系统
🌐 域名评估:
aaaa.xj.cn
eyxz.cn
musk.fashion
ee.hn.cn
tpyd.cn
vision2200.cn
oikid.com.cn
gpbg.cn
aaaa.cab
bxss.me
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
温泉设计施工
站搜
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。