如何配置mysql ssl_mysql加密通信设置

发布时间 - 2025-12-27 00:00:00    点击率:
MySQL SSL配置通过加密通道防止数据窃听,需生成CA证书、服务器证书和私钥,配置服务端SSL参数并重启,强制用户REQUIRE SSL,客户端连接时指定ssl-mode及CA证书路径。

MySQL SSL 配置就是让客户端和服务器之间用加密通道通信,防止密码、数据在传输中被窃听。核心是生成或获取合法的 SSL 证书和密钥文件,并在 MySQL 服务端和客户端正确启用。

准备 SSL 证书和密钥文件

MySQL 要求三类文件:CA 证书(ca.pem)、服务器证书(server-cert.pem)和服务器私钥(server-key.pem)。推荐用 OpenSSL 自签(测试/内网可用),生产环境建议使用受信任 CA 签发的证书。

快速生成自签名证书(在 MySQL 数据目录外安全位置执行):

  • 生成 CA 密钥和证书:
    openssl genrsa 2048 > ca-key.pem
    openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem
  • 生成服务器私钥和证书请求:
    openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
  • 用 CA 签发服务器证书:
    openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

生成后把 ca.pem、server-cert.pem、server-key.pem 放到 MySQL 配置能读取的路径(如 /etc/mysql/ssl/),并确保 MySQL 用户有读权限。

配置 MySQL 服务端启用 SSL

编辑 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/mysqld.cnf),在 [mysqld] 段添加:

  • ssl-ca = /etc/mysql/ssl/ca.pem
  • ssl-cert = /etc/mysql/ssl/server-cert.pem
  • ssl-key = /etc/mysql/ssl/server-key.pem

重启 MySQL:
sudo systemctl restart mysql(或 mysqld

登录 MySQL 执行:
SHOW VARIABLES LIKE '%ssl%';
确认 have_sslYES,且 ssl_cassl_certssl_key 显示对应路径。

强制用户走 SSL 连接

创建或修改用户时指定 REQUIRE SSL,例如:

  • 新建用户:
    CREATE USER 'appuser'@'%' IDENTIFIED BY 'pwd123' REQUIRE SSL;
  • 修改已有用户:
    ALTER USER 'appuser'@'%' REQUIRE SSL;

之后该用户连接必须提供客户端证书(可选)或至少启用加密通道。验证是否生效:
SELECT user, host, ssl_type FROM mysql.user WHERE user = 'appuser';
结果中 ssl_type 应为 ANY(表示仅需 SSL 加密,不校验客户端证书)或 X509(要求客户端证书)。

客户端连接启用 SSL

命令行连接示例(Linux/macOS):
mysql -u appuser -p --ssl-mode=REQUIRED -h db.example.com

如果要验证服务器证书(推荐):
mysql -u appuser -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=/path/to/ca.pem -h db.example.com

应用连接时(如 Python PyMySQL)需显式传入 SSL 参数:
ssl={'ca': '/path/to/ca.pem'},并设置 ssl_mode='VERIFY_IDENTITY'

注意:MySQL 8.0+ 默认 --ssl-mode=REQUIRED,但旧版本或某些客户端可能默认禁用,务必显式指定。


# mysql  # linux  # python  # node  # app  # ssl  # mac  # macos  # 配置文件  # 加密通信  # cos  # red 


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


相关推荐: 如何破解联通资金短缺导致的基站建设难题?  如何在局域网内绑定自建网站域名?  网站页面设计需要考虑到这些问题  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Android Socket接口实现即时通讯实例代码  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何用低价快速搭建高质量网站?  Swift中swift中的switch 语句  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  利用JavaScript实现拖拽改变元素大小  如何为不同团队 ID 动态生成多个独立按钮  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何快速上传建站程序避免常见错误?  焦点电影公司作品,电影焦点结局是什么?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel如何创建自定义中间件?(Middleware代码示例)  如何快速登录WAP自助建站平台?  Laravel如何处理表单验证?(Requests代码示例)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何使用Blade模板引擎?(完整语法和示例)  html如何与html链接_实现多个HTML页面互相链接【互相】  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Java解压缩zip - 解压缩多个文件或文件夹实例  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Python面向对象测试方法_mock解析【教程】  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在腾讯云服务器上快速搭建个人网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Android滚轮选择时间控件使用详解  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel如何处理和验证JSON类型的数据库字段  如何批量查询域名的建站时间记录?  如何用PHP工具快速搭建高效网站?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在 Pandas 中基于一列条件计算另一列的分组均值  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel怎么在Blade中安全地输出原始HTML内容  JavaScript如何实现倒计时_时间函数如何精确控制  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel如何创建自定义Artisan命令?(代码示例)