MySQL8的SSL功能可以帮助用户更安全地管理数据库,提高数据安全性。

一、SSL概念

SSL(Secure Socket Layer:安全套接字)利用数据加密,身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议。

SSL协议提供的功能主要有:

(1)数据传输的机密性:利用对称密钥算法对传输的数据进行加密

(2)身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的

(3)消息完整性验证:消息传输过程中使用MAC算法来校验消息的完整性。

如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的。

在数据库方面,客户端连接服务器使用SSL连接,能加密通信数据。

(1)启动SSL:可以在MySQL配置文件中启用SSL,需要指定SSL证书、私钥和CA证书的路径。

(2)SSL握手验证:MySQL8支持SSL握手验证,可以确保客户端连接到正确的服务器。

(3)SSL客户端认证:MySQL8支持客户端证书认证,可以进一步增强安全性。

(4)SSL连接限制:可以通过修改MySQL配置文件中的参数来限制SSL连接的最大数量和连接的最大并发数。

二、MySQL实现SSL的流程

(1)先为MySQL服务器创建SSL证书和私钥

(2)在MySQL里面配置SSL,并启动服务

(3)创建用户的时候带上SSL标签(require ssl)

(4)连接数据库的时候带上SSL

三、MySQL配置SSL

3.1、SSL策略

--ssl-mode是MySQL命令行客户端的一个选项,用于指定SSL/TLS连接的模式。

可供选择的值:DISABLED(禁用SSL)、REQUIRED(必须使用SSL)、VERIFY_CA(验证CA)、VERIFY_IDENTITY(验证身份)

3.2、创建证书

(1)安装openssl依赖包:yum install -y openssl

(2)查看openssl版本:openssl version

(3)生成SSL连接所需RSA密钥对

mysql_ssl_rsa_setup --datadir=/var/lib/mysql --user=mysql --uid=mysql
# datadir: 指定数据库文件路径
# user、uid:指定运行mysql_ssl_rsa_setup命令的用户

会在datadir目录下自动生成以下文件

(1)ca-key.pem:CA证书私钥文件,用于生成SSL连接所需的服务器和客户端证书。
(2)ca.pem:CA证书公钥文件,用于验证SSL连接中服务器和客户端证书的合法性。
(3)client-cert.pem:客户端证书,在SSL连接中用于验证客户端的身份。
(4)client-key.pem:客户端证书的私钥,用于加密和解密SSL连接中客户端发送的数据。
(5)private_key.pem:私钥文件,用于加密和解密SSL连接中的数据。
(6)public_key.pem:公钥文件,用于验证SSL连接中的数据。
(7)server_cert.pem:服务器证书,用于验证MySQL数据库服务器的身份。
(8)server_key.pem:服务器证书的私钥,用于加密和解密SSL连接中服务器发送的数据。

3.3、配置证书

(1)配置my.ini文件

[mysqld]
# 指定CA证书公钥文件的路径
ssl-ca=/path/to/ca.pem
# 指定mysql服务器证书的路径
ssl-cert=/path/to/server_cert.pem
# 指定mysql服务器证书的私钥路径
ssl-key=/path/to/server_key.pem [client]
# 指定CA证书公钥文件的路径
ssl-ca=/path/to/ca.pem
# 指定mysql客户端证书的路径
ssl-cert=/path/to/client_cert.pem
# 指定mysql客户端证书的私钥路径
ssl-key=/path/to/client_key.pem

(2)重启mysql服务:systemctl restart mysqld

3.4、检查SSL配置

(1)查看MySQL服务器是否支持SSL:SHOW VARIABLES LIKE 'have_ssl';

Tips:如果输出显示 have_ssl 的值为 YES,则表明MySQL支持SSL。

(2)查看全局变量中包含"SSL"字符的所有变量名和值:show global variable like "%SSL%";

(3)查看tls安全传输版本:show global variables like "tls_version";

(4)检查SSL证书和密钥是否已被配置:SHOW VARIABLES LIKE 'ssl%';

Tips:查看输出结果中是否有ssl_ca、ssl_cert和ssl_key等变量存在,并且这些变量的值不为空,表示SSL配置已经存在。

(5)检查当前的连接是否使用了SSL:SHOW STATUS LIKE 'Ssl_cipher';

Tips:如果Ssl_cipher的值不是NULL或空字符串,那么当前连接正在使用SSL。

(6)检查当前连接使用的SSL版本和协议:

SHOW STATUS LIKE 'Ssl_version';
SHOW STATUS LIKE 'Ssl_session_reuses';

(7)检查SSL会话状态

SHOW STATUS LIKE 'Ssl_accept_renegotiates';
SHOW STATUS LIKE 'Ssl_accepts';
SHOW STATUS LIKE 'Ssl_connect_renegotiates';
SHOW STATUS LIKE 'Ssl_connected';
SHOW STATUS LIKE 'Ssl_server_not_finished';

3.5、配置SSL用户

(1)创建用户普通认证方式

-- 创建用户
create user 用户名@'%' identified by '密码';
-- 给用户赋权
grant all on *.* to 用户名@'%';
-- 应用权限配置
flush privileges;
-- 查看用户权限
select user,host,ssl_type,ssl_cipher from mysql.user;

(2)创建用户强制证书认证

-- require ssl强制用户使用证书认证
create user 用户名@'%' identified by '密码' require ssl;
-- require x509强制用户使用证书认证
create user 用户名@'%' identified by '密码' require x509;
-- 给用户授权
grant all on *.* to 用户名@'%';
-- 应用权限配置
flush privileges;
-- 查看用户权限
select user,host,ssl_type,ssl_cipher from mysql.user;

(3)设置用户强制证书登录

-- 设置强制ssl
alter user user0001@'%' require ssl;
-- 取消强制ssl
alter user user0001@'%' require none;

3.6、SSL登录

(1)加密登录方法1

# --ssl-mode=disable: 表示关闭SSL加密模式
mysql -uroot -p --ssl-mode=disable
# 登录mysql后查看加密模式
status # --ssl-ode=required: 标识强制开启SSL加密模式
mysql -uroot -p --ssl-mode=required
# 登录mysql后查看加密模式
status

(2)加密登录方法2

# 指定CA证书及客户端证书及私钥
mysql -uroot -p --ssl-ca=/var/lib/mysql/ca.pem \
--ssl-cert=/var/lib/mysql/client-cert.pem \
--ssl-key=/var/lib/mysql/client-key.pem

— 业精于勤荒于嬉,行成于思毁于随 —

MySQL - [16] SSL的更多相关文章

  1. Mysql的ssl主从复制+半同步主从复制

    Mysql的ssl主从复制+半同步主从复制 准备工作 1.主从服务器时间同步 [root@localhost ~]# crontab -e */30 * * * * /usr/sbin/ntpdate ...

  2. MySQL开启SSL认证,以及简单优化

    1.1 MySQL开启SSL认证 #生成一个 CA 私钥 [root@db01 ssl]# openssl genrsa 2048 > ca-key.pem Generating RSA pri ...

  3. mysql -- mysql基于ssl的主从复制

    mysql基于ssl的主从复制由于mysql在复制过程中是明文的,所以就大大降低了安全性,因此需要借助于ssl加密来增加其复制的安全性. 主服务器node1:172.16.200.1从服务器node2 ...

  4. mysql建立ssl安全连接的配置

    mysql建立ssl安全连接的配置 1.环境.IP.安装包: centOS 5.4 虚拟机了两台服务器 mysql-5.1.48.tar.gz openssl-0.9.8b.tar.gz server ...

  5. Java连接mysql——Establishing SSL connection without server's identity verification is not recommended.

    Establishing SSL connection without server's identity verification is not recommended. 出现这个错误的原因是因为m ...

  6. MySQL 使用 SSL 连接(附 Docker 例子)

    查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql> SHOW VARIABLES LIKE 'have_ssl'; +-------- ...

  7. Mysql使用SSL连接

    最近项目中用到了SSL连接,记录一下,环境为windows10,Mysql版本为5.6 查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql&g ...

  8. MySQL的SSL加密连接与性能开销

    本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...

  9. mysql 提示ssl问题

    问题信息如下: rements SSL connection must be established by default if explicit option isn't set. For comp ...

  10. SpringBoot设置mysql的ssl连接

    因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接. 开发环境信息: SpringBoot: 2.0.5.RELEASE mysql-connector-java: 8 ...

随机推荐

  1. 【巧用set实现对有序数组O(logn)时间复杂度增、删、查、改、二分操作】codeforces 1041 C. Coffee Break

    题意 第一行输入三个整数 \(n,m,d(1 \leq n \leq 2 * 10^5, n \leq m \leq 10^9, 1 \leq d \leq n)\),第二行输入 \(n\) 个整数, ...

  2. MAC清理

    今日分享 Mac清理 有很多三方软件可以清理,以前用过腾讯的柠檬lite,每次就清个几百兆,系统数据感觉还是得自己手动清理才行 今天电脑又在提醒储存空间不足了,一看占用发现系统数据占了100多个G,学 ...

  3. Tauri2.0-Vue3OS桌面端os平台|tauri2+vite6+arco电脑版OS管理系统

    自研tauri2.x+vite6+vue3+arco.design客户端os管理系统Tauri2ViteOS. vue3-tauri2-os原创跨平台Tauri2.0+Vite6+Pinia2+Arc ...

  4. 我们需要什么样的 ORM 框架

    了解我的人都知道, 本人一直非常排斥 ORM 框架, 由于对象关系阻抗不匹配, 一直觉得它没有什么用, 操作数据库最好的手段是 sql+动态语言. 但这两年想法有了重大改变. 2013 年用 js 实 ...

  5. 【PHP】连接数据库验证登陆

    界面 <!doctype html> <html lang="en"> <head> <!-- Required meta tags -- ...

  6. apache kylin的一些注意事项(解决kylin报错Storage schema reading not supported)

    1.目前我所使用的kylin版本为2.6.2,有时在完成一次构建后会出现fail to locate kylin.properties的异常,如图所示 经排查,定位到kylin源码中的 org.apa ...

  7. Java网约车项目实战:实现抢单功能详解

    在网约车项目中,抢单功能是非常关键的一部分,它决定了司机能否及时响应乘客的订单,提高整个平台的运营效率.本文将详细介绍如何使用Java来实现网约车项目的抢单功能,并提供一个完整的代码示例,以便读者能够 ...

  8. AndroidStudio 彻底关闭http网络代理方法

    以前在AndroidStudio中设置完代理后,会在项目的gradle.properties文件中生成代理配置信息: 即使你在setting的http proxy中关掉代理,实际编译时还会使用上次设置 ...

  9. 大端地址 小端地址 网络字节序 intel主机字节序

    小端字节序:低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序:高字节数据存放在内存低地址处,低字节数据存放在内存高地址处. 网络字节序: MSB 高字节前存法 Most Sign ...

  10. milvus操作

    java 引入依赖 <dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-j ...