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 ...
随机推荐
- 虚拟机 ubuntu18 树莓派4 QT5.14.2 交叉编译
编译过程主要参考了 <为树莓派4交叉编译QT5.14.2(带EGLFS支持)>,可以按照教程一步一步进行,在整个过程中,有2个地方需要注意. 1. sudo rpi-update 因为网络 ...
- 在PlatformIO IDE中对ESP32的CPU主频等进行配置
前言 rt,有一天开发中需要尽可能发挥ESP32的全部性能,提高主频自然是首选,在Arduino IDE中修改主频很方便,但在PlatformIO IDE中修改主频的方法网上说的却很少,今天就总结一下 ...
- docker-compose安装mysql
0. 安装docker-compose,参见:[Amadeus原创]docker compose的安装 1. 目录结构:按以下目录结构mkdir文件夹和相关文件 mysql 目录下的 data 为数据 ...
- https://gitlab.com/volian/nala/-/wikis/Installation
Installation Debian Testing/Sid Nala is officially in the testing and sid repos. sudo apt install ...
- FISCO BCOS 控制台 部署合约 调用 查看已部署合约的地址
deploy 部署合约.(默认提供HelloWorld合约和TableTest.sol进行示例使用) 参数: 合约路径:合约文件的路径,支持相对路径.绝对路径和默认路径三种方式.用户输入为文件名时,从 ...
- Qt编写地图综合应用11-动态添加
一.前言 在添加设备点或者区域形状的时候,会考虑是直接静态的方式写入到网页中加载,还是动态js函数异步加载的方式,这个需要根据现场的实际需求来,如果只需要一次加载的话建议静态即可,如果运行期间还需要动 ...
- Qt开源作品37-网络中转服务器
一.前言 用Qt做开发10年了,其中做过好多项目,基于现在web和移动互联网发展如此迅猛,大量的应用场景需要一个网络中转服务器,可以实现手机app或者其他客户端远程回控设备,现在物联网发展非常迅猛,这 ...
- 使用 Visual Studio Code 进行调试
现在是时候实践你新获得的调试知识了. 我们刚好有一个完美的机会. 在我们的 Tailwind Traders 应用中,我们正在开发一项新功能:允许以多种货币显示产品的价格. 一位同事为这一目的编写了一 ...
- C#中定义委托的思路
如同在C#的类中定义成员变量或属性一样,类中定义成员变量(private)或属性(public),在类的构造方法中为变量或属性赋值或初始化. 在C#的类中定义委托变量同样遵循这个思路.首先声明一个委托 ...
- linux-杂项
1.常用基础 防火墙systemctl status firewalldsystemctl stop firewalldsystemctl start firewalld find / -size + ...