Mysql8配置SSL安全连接的详细指南

 更新时间:2025年06月17日 09:58:54   作者:石小千  
Mysql 8 默认启用SSL安全连接,也可以强制必须启用,这篇文章主要来和大家介绍一下如何在Mysql8中配置SSL安全连接,有需要的小伙伴可以了解下

概述

Mysql 8 默认启用SSL安全连接,也可以强制必须启用。建议手动生成自签名证书和key并配置到服务端和客户端路径里,也可以直接使用mysql默认生成的。

前提条件

  • 使用OpenSSL编译的MySQL服务器
  • 官网mysql安装包已经集成了,支持ssl自签名证书
  • 自签名证书文件系统自动生成,默认在数据存储目录下

[root@centos7-172-028-002-001 mysql]# ll /var/lib/mysql | grep pem
-rw------- 1 mysql mysql       1680 3月  18 22:03 ca-key.pem
-rw-r--r-- 1 mysql mysql       1108 3月  18 22:03 ca.pem
-rw-r--r-- 1 mysql mysql       1108 3月  18 22:03 client-cert.pem
-rw------- 1 mysql mysql       1676 3月  18 22:03 client-key.pem
-rw------- 1 mysql mysql       1680 3月  18 22:03 private_key.pem
-rw-r--r-- 1 mysql mysql        452 3月  18 22:03 public_key.pem
-rw-r--r-- 1 mysql mysql       1108 3月  18 22:03 server-cert.pem
-rw------- 1 mysql mysql       1680 3月  18 22:03 server-key.pem

因为是自签名证书,启动日志中会报一条警告信息

[Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.

Mysql 8手动配置SSL安全连接

修改配置文件

[mysqld]
# 强制所有网络连接使用ssl。socket不受限制(默认就是安全状态。如果客户端强制使用SSL连接,允许登录,但会提示建议取消SSL的信息)
require_secure_transport=ON

修改运行参数

进入数据库手动设置正在运行的数据库

SET PERSIST require_secure_transport=ON;

Mysql 8服务器端配置SSL安全连接

[mysqld]
# 可以自行创建ca证书、服务端证书和KEY
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
# 如果开启,那么强制客户端必须使用SSL连接;如果关闭,可以指定账号使用SSL连接
require_secure_transport=ON

Mysql 8客户端配置SSL安全连接

--ssl-mode=DISABLED|PREFERRED|REQUIRED|VERIFY_CA|VERIFY_IDENTITY

1.DISABLED

  • 完全不使用SSL加密
  • 所有通信都以明文传输
  • 安全性最低,性能最好
  • 适用于测试环境或内部安全网络

2.PREFERRED

  • 默认模式
  • 尝试使用SSL,失败则回退到非SSL
  • 对于Unix套接字连接不会加密
  • 平衡了安全性和兼容性

3.REQUIRED

  • 强制要求SSL加密
  • 如果服务器不支持SSL则连接失败
  • 不验证证书的有效性
  • 适用于需要加密但不关心证书来源的环境

4.VERIFY_CA

  • 要求SSL加密
  • 验证服务器证书是否由受信任的CA签发
  • 不验证主机名是否匹配
  • 比REQUIRED更安全

5.VERIFY_IDENTITY

  • 最严格的模式
  • 要求SSL加密
  • 验证CA证书
  • 验证主机名是否与证书匹配
  • 防止中间人攻击
  • 安全性最高,配置也最复杂

Mysql 8客户端连接验证

服务端开启了require_secure_transport=ON,客户端禁用SSL连接,被拒绝

[root@centos7-05145 ~]# mysql -h 172.28.2.1 -u root -p --ssl-mode=DISABLED
Enter password: 
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

服务端开启了require_secure_transport=ON,客户端启用SSL连接,查看连接状态

[root@centos7-05145 ~]# mysql -h 172.28.2.1 -u root -p --ssl-mode=REQUIRED
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.4 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql  Ver 8.4.2 for Linux on x86_64 (MySQL Community Server - GPL)Connection id:          8
Current database:


Current user:           root@192.168.5.145
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.4.4 MySQL Community Server - GPL
Protocol version:       10
Connection:             172.28.2.1 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Binary data as:         Hexadecimal
Uptime:                 2 min 44 sec

Threads: 2  Questions: 6  Slow queries: 0  Opens: 512  Flush tables: 3  Open tables: 26  Queries per second avg: 0.036
--------------

Mysql 8 创建使用SSL安全连接的账号

# require ssl 强制账号使用证书认证
CREATE USER 用户名@'%' IDENTIFIED BY 'password' require ssl;

# require x509 强制账号使用证书认证
CREATE USER 用户名@'%' IDENTIFIED BY 'password' require x509;

# 修改账号使用证书认证
ALTER USER '用户名'@'%'  require ssl;

到此这篇关于Mysql8配置SSL安全连接的详细指南的文章就介绍到这了,更多相关Mysql配置SSL安全连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL WITH AS创建临时表的实现

    MySQL WITH AS创建临时表的实现

    在MySQL中,我们可以通过WITH AS方法创建临时结果集,本文主要介绍了MySQL WITH AS创建临时表的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • MySQL处理大量DELETE操作的多种方法

    MySQL处理大量DELETE操作的多种方法

    本文将讨论 MySQL 中的大量 DELETE 操作,包括其潜在影响、最佳实践和性能优化策略,我们将通过 Java 代码示例展示如何高效地执行这些操作,并分析不同方法的优缺点,最后,提供相关的测试用例及结果预期,以帮助开发者更好地理解和应用这些技术,需要的朋友可以参考下
    2024-10-10
  • SQL查询至少连续n天登录的用户

    SQL查询至少连续n天登录的用户

    这篇文章介绍了SQL查询至少连续n天登录用户的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • MySQL中隔离级别的使用详解

    MySQL中隔离级别的使用详解

    这篇文章主要介绍了MySQL中隔离级别的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • MySQL Redo与Undo日志详细解析

    MySQL Redo与Undo日志详细解析

    这篇文章主要介绍了MySQL Redo与Undo日志详细解析,Redo日志是物理日志,记录的是页面的变化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • MySQL中utf8mb4排序规则示例

    MySQL中utf8mb4排序规则示例

    本文主要介绍了MySQL中utf8mb4排序规则,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • MySQL中把varchar类型转为date类型方法详解

    MySQL中把varchar类型转为date类型方法详解

    这篇文章主要介绍了MySQL中把varchar类型转为date类型方法详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • mysql连接数清理方案

    mysql连接数清理方案

    这篇文章主要介绍了mysql连接数清理方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • 解决MySQL启动报错:Warning:mysqld.service changed on disk问题

    解决MySQL启动报错:Warning:mysqld.service changed on 

    文章提示MySQL启动时报错,因服务配置文件已更改,需运行`systemctl daemon-reload`重新加载配置,随后重启MySQL服务以解决此问题
    2025-09-09
  • Mariadb数据库的备份与恢复过程详细介绍

    Mariadb数据库的备份与恢复过程详细介绍

    MariaDB是一个流行的开源关系型数据库管理系统,备份与恢复数据是数据库管理中非常重要的一个环节,能够保证数据的安全性和可靠性,这篇文章主要介绍了Mariadb数据库的备份与恢复过程的相关资料,需要的朋友可以参考下
    2025-10-10

最新评论