mysql如何配置SSL加密连接_mysql传输安全设置

发布时间 - 2026-01-31 00:00:00    点击率:
MySQL启用SSL需服务端生成证书、配置my.cnf并设require_secure_transport=ON;客户端须用VERIFY_CA模式验证CA证书;连接后需通过STATUS或查询Ssl_cipher确认加密生效。

MySQL 服务端 SSL 证书生成与启用

MySQL 要支持 SSL 加密连接,必须先在服务端生成或配置有效的证书文件,并在 my.cnf 中显式启用。不启用就等于没配,客户端即使强制要求 SSL 也会被拒绝。

  • 证书路径必须由 MySQL 进程可读(常见坑:SELinux 或文件权限阻止 mysqld 读取 ca.pem/server-cert.pem/server-key.pem
  • 推荐用 OpenSSL 一次性生成三件套:openssl req -x509 -newkey rsa:4096 -days 3650 -nodes -keyout server-key.pem -out server-cert.pem -subj "/CN=localhost",再用 openssl x509 -in server-cert.pem -out ca.pem -signkey server-key.pem 补全 CA 文件
  • 配置段加在 [mysqld] 下:
    ssl_ca = /var/lib/mysql/ca.pem
    ssl_cert = /var/lib/mysql/server-cert.pem
    ssl_key = /var/lib/mysql/server-key.pem
    require_secure_transport = ON
    ,其中 require_secure_transport = ON 是强制所有连接走加密通道的关键开关

客户端连接时如何验证服务器证书

只服务端配了 SSL 不够,客户端默认不校验证书,容易被中间人劫持。真正安全的连接必须让客户端主动验证 CA 签发链。

  • 命令行连接加 --ssl-mode=VERIFY_CA 并指定 CA 文件:mysql -u user -p --ssl-ca=/path/to/ca.pem --ssl-mode=VERIFY_CA
  • 若用 Python 的 pymysql,需传入 ssl={'ca': '/path/to/ca.pem'};用 mysql-connector-python 则设 ssl_disabled=False, ssl_ca='/path/to/ca.pem'
  • ssl-mode=REQUIRED 仅加密不验证,等同于明文风险;VERIFY_IDENTITY 更进一步校验主机名,但要求证书 CNsubjectAltName 匹配实际连接地址

检查当前连接是否真的走 SSL

很多用户以为连上了就安全了,其实可能 fallback 到非加密连接。必须实时确认会话级加密状态。

  • 登录后执行 STATUS;,看输出里 SSL: 行是否显示 Cipher in use is ...
  • 更可靠的是查会话变量:SHOW VARIABLES LIKE 'have_ssl';(服务端是否支持)和 SELECT * FROM performance_schema.status_by_thread WHERE variable_name = 'Ssl_cipher';
  • 如果 Ssl_cipher 为空字符串,说明当前连接未启用 SSL,哪怕全局配置都开着——常见于客户端没传证书参数或服务端 require_secure_transport 未开启

常见报错与绕过陷阱

SSL 配置出问题时错误信息往往模糊,重点盯住几个典型提示。

  • SSL connection error: protocol version mismatch:客户端和服务端 TLS 版本不兼容,MySQL 8.0.16+ 默认禁用 TLSv1.0/TLSv1.1,需确保客户端支持 TLSv1.2+
  • ERROR 9002 (HY000): SSL connection is required:服务端开了 require_secure_transport,但客户端没带 SSL 参数,不能靠加 --skip-ssl 绕过,那是自废武功
  • 使用 Docker 或云数据库时,localhost 连接常走 socket 而非 TCP,SSL 不生效;应改用 127.0.0.1 强制走网络栈

证书不是配完就一劳永逸的,CA 过期、密钥泄露、TLS 协议升级都会让加密形同虚设。每次变更后务必用真实客户端复测,别只信配置文件里那几行。


# mysql  # linux  # python  # node  # docker  # ssl  #   # 配置文件  # red  # select  # Error  # 字符串  # 数据库  # 客户端  # 服务端  # 复测  # 的是  # 几个  # 也会  # 那是  # 上了  # 形同虚设  # 开了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 高性价比服务器租赁——企业级配置与24小时运维服务  Laravel中的withCount方法怎么高效统计关联模型数量  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  bootstrap日历插件datetimepicker使用方法  C#如何调用原生C++ COM对象详解  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  如何在阿里云完成域名注册与建站?  Bootstrap整体框架之JavaScript插件架构  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  iOS正则表达式验证手机号、邮箱、身份证号等  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel如何实现文件上传和存储?(本地与S3配置)  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel如何创建自定义Facades?(详细步骤)  中山网站推广排名,中山信息港登录入口?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  制作电商网页,电商供应链怎么做?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  jQuery 常见小例汇总  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  香港服务器网站卡顿?如何解决网络延迟与负载问题?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  网站建设要注意的标准 促进网站用户好感度!  zabbix利用python脚本发送报警邮件的方法  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何自定义建站之星模板颜色并下载新样式?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何在自有机房高效搭建专业网站?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  西安专业网站制作公司有哪些,陕西省建行官方网站?  使用C语言编写圣诞表白程序  Java类加载基本过程详细介绍  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel distinct去重查询_Laravel Eloquent去重方法  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  深入理解Android中的xmlns:tools属性  微信小程序 wx.uploadFile无法上传解决办法  北京网站制作公司哪家好一点,北京租房网站有哪些?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何快速打造个性化非模板自助建站?  php json中文编码为null的解决办法  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速选择适合个人网站的云服务器配置?  活动邀请函制作网站有哪些,活动邀请函文案?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  python中快速进行多个字符替换的方法小结