MySQL - [16] SSL
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的更多相关文章
- Mysql的ssl主从复制+半同步主从复制
Mysql的ssl主从复制+半同步主从复制 准备工作 1.主从服务器时间同步 [root@localhost ~]# crontab -e */30 * * * * /usr/sbin/ntpdate ...
- MySQL开启SSL认证,以及简单优化
1.1 MySQL开启SSL认证 #生成一个 CA 私钥 [root@db01 ssl]# openssl genrsa 2048 > ca-key.pem Generating RSA pri ...
- mysql -- mysql基于ssl的主从复制
mysql基于ssl的主从复制由于mysql在复制过程中是明文的,所以就大大降低了安全性,因此需要借助于ssl加密来增加其复制的安全性. 主服务器node1:172.16.200.1从服务器node2 ...
- mysql建立ssl安全连接的配置
mysql建立ssl安全连接的配置 1.环境.IP.安装包: centOS 5.4 虚拟机了两台服务器 mysql-5.1.48.tar.gz openssl-0.9.8b.tar.gz server ...
- 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 ...
- MySQL 使用 SSL 连接(附 Docker 例子)
查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql> SHOW VARIABLES LIKE 'have_ssl'; +-------- ...
- Mysql使用SSL连接
最近项目中用到了SSL连接,记录一下,环境为windows10,Mysql版本为5.6 查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql&g ...
- MySQL的SSL加密连接与性能开销
本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...
- mysql 提示ssl问题
问题信息如下: rements SSL connection must be established by default if explicit option isn't set. For comp ...
- SpringBoot设置mysql的ssl连接
因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接. 开发环境信息: SpringBoot: 2.0.5.RELEASE mysql-connector-java: 8 ...
随机推荐
- 【巧用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\) 个整数, ...
- MAC清理
今日分享 Mac清理 有很多三方软件可以清理,以前用过腾讯的柠檬lite,每次就清个几百兆,系统数据感觉还是得自己手动清理才行 今天电脑又在提醒储存空间不足了,一看占用发现系统数据占了100多个G,学 ...
- Tauri2.0-Vue3OS桌面端os平台|tauri2+vite6+arco电脑版OS管理系统
自研tauri2.x+vite6+vue3+arco.design客户端os管理系统Tauri2ViteOS. vue3-tauri2-os原创跨平台Tauri2.0+Vite6+Pinia2+Arc ...
- 我们需要什么样的 ORM 框架
了解我的人都知道, 本人一直非常排斥 ORM 框架, 由于对象关系阻抗不匹配, 一直觉得它没有什么用, 操作数据库最好的手段是 sql+动态语言. 但这两年想法有了重大改变. 2013 年用 js 实 ...
- 【PHP】连接数据库验证登陆
界面 <!doctype html> <html lang="en"> <head> <!-- Required meta tags -- ...
- apache kylin的一些注意事项(解决kylin报错Storage schema reading not supported)
1.目前我所使用的kylin版本为2.6.2,有时在完成一次构建后会出现fail to locate kylin.properties的异常,如图所示 经排查,定位到kylin源码中的 org.apa ...
- Java网约车项目实战:实现抢单功能详解
在网约车项目中,抢单功能是非常关键的一部分,它决定了司机能否及时响应乘客的订单,提高整个平台的运营效率.本文将详细介绍如何使用Java来实现网约车项目的抢单功能,并提供一个完整的代码示例,以便读者能够 ...
- AndroidStudio 彻底关闭http网络代理方法
以前在AndroidStudio中设置完代理后,会在项目的gradle.properties文件中生成代理配置信息: 即使你在setting的http proxy中关掉代理,实际编译时还会使用上次设置 ...
- 大端地址 小端地址 网络字节序 intel主机字节序
小端字节序:低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序:高字节数据存放在内存低地址处,低字节数据存放在内存高地址处. 网络字节序: MSB 高字节前存法 Most Sign ...
- milvus操作
java 引入依赖 <dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-j ...