首页/数据/数据库速查/账号强制 TLS 连接与证书要求

账号强制 TLS 连接与证书要求

对高敏账号设置 REQUIRE X509/SSL/SUBJECT 要求加密与证书校验;结合客户端 ssl-mode 可做到端到端身份验证。

数据库速查数据更新于 2026-10-13

账号强制加密连接

MySQL 账号可以声明传输层要求:REQUIRE SSL 只要求走加密通道;REQUIRE X509 还要求客户端出示有效证书;REQUIRE ISSUER / SUBJECT 再按证书的签发者或主题做匹配。客户端配合 --ssl-mode=VERIFY_CA 或 VERIFY_IDENTITY 校验服务端,就能形成双向校验,避免链路被抓包或服务端被冒充。

基本信息

适用平台MySQL 5.7 / 8.0;更早版本用 --ssl-ca 等老参数
账号级选项REQUIRE SSL / X509 / ISSUER / SUBJECT / CIPHER
客户端选项--ssl-mode=DISABLED|PREFERRED|REQUIRED|VERIFY_CA|VERIFY_IDENTITY
前置条件服务端已启用 TLS 并配置好证书与私钥
校验强度REQUIRE SSL 只保证加密,不校验对端身份
查看现状SHOW STATUS LIKE 'Ssl_cipher' 与 Ssl_version

典型使用场景

  • 财务、身份、支付类账号强制加密,满足合规对传输安全的要求
  • 跨机房或跨公网链路访问数据库时避免口令与数据被抓包
  • 多团队共用实例,敏感库用证书校验,普通账号维持 PREFERRED
  • 用客户端证书做机器级身份绑定,降低口令泄露后的可用性
  • 排障时确认某条连接是否真的走了 TLS

服务端配置与验证

服务端配置与验证
# 账号级传输要求
ALTER USER 'finance'@'%' REQUIRE SSL;                   # 必须加密
ALTER USER 'batch'@'10.0.%' REQUIRE X509;               # 必须带客户端证书
ALTER USER 'app'@'10.0.%' REQUIRE ISSUER '/CN=Corp-CA'; # 限定签发者

# 服务端侧确认 TLS 参数已配置
SHOW VARIABLES LIKE 'tls_version';
SHOW STATUS LIKE 'Ssl_cipher_list';

# 查看当前会话是否加密
SHOW SESSION STATUS LIKE 'Ssl_version';
SHOW SESSION STATUS LIKE 'Ssl_cipher';

客户端连接

客户端连接
# 校验服务端证书链与主机名,并带上客户端证书做双向校验
mysql --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/mysql/ca.pem \
  --ssl-cert=/etc/mysql/client-cert.pem --ssl-key=/etc/mysql/client-key.pem \
  -h db.example.com -ufinance -p

# 确认连接实际使用的加密套件
mysql --ssl-mode=VERIFY_CA --ssl-ca=/etc/mysql/ca.pem -h db.example.com -uapp -p -e "SHOW STATUS LIKE 'Ssl_cipher';"

模式与校验范围

模式或选项校验内容适用场景
--ssl-mode=REQUIRED只要求加密通道内网可信网段
--ssl-mode=VERIFY_CA校验对端证书是否由指定 CA 签发防止自签证书冒充
--ssl-mode=VERIFY_IDENTITY在前者基础上再校验主机名公网或跨网访问
REQUIRE SSL服务端要求加密,不校验客户端证书基础合规
REQUIRE X509要求客户端证书有效机器身份绑定
REQUIRE ISSUER按证书签发者精确匹配只信任自有 CA
8.0 客户端默认 --ssl-mode=PREFERRED,即优先加密但不校验证书,因此「连接是加密的」不等于「对端可信」。要做到端到端可信,客户端必须显式使用 VERIFY_CA 或 VERIFY_IDENTITY,并带上 CA 文件路径。
批量把账号切成 REQUIRE 之前先摸底客户端能力:老驱动、老连接池可能不支持 TLS,或证书链与主机名不匹配,一刀切会让业务成批连不上。稳妥做法是先灰度一批账号,确认全部客户端通过后再全量切换。

易错点

  • 只配服务端证书就以为安全:客户端不加 VERIFY_CA 时,中间人可以用自签证书冒充服务端
  • 证书到期无人监控:服务端证书过期后,所有强制加密的账号会集体连不上
  • 给账号加 REQUIRE X509 却没给客户端分发证书:账号立刻不可用,需先下发证书再切换
  • 把 REQUIRE SSL 当身份校验:它只保证链路加密,任何拿到口令的人仍然能登录
  • 连接池开了加密但没配 CA 路径:驱动回退到不校验模式,看起来加密实际无验证

数据来源与参考

  • MySQL 8.0 Reference Manual: Using Encrypted Connections

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌