MySQL加密连接与基于RSA的密码交换

本文详细介绍了MySQL 8.0中加密连接的实现原理,包括SSL/TLS协议、所需组件如CA证书、服务器及客户端证书等,并探讨了基于RSA的密码交换。文章还讨论了相关系统变量,如require_secure_transport、ssl_ca等,以及如何在客户端和服务器端配置这些变量。通过示例展示了不同SSL模式的连接效果,强调了TLS协议版本选择的规则和客户端缓存机制的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着mysql8.0的使用,mysql更换了创建用户时默认的密码认证插件,从之前的mysql_native_password插件更换为caching_sha2_password插件。新的插件要求使用连接加密的方式用于mysql server与client之间的tcp连接,或者如果不满足使用加密连接的条件下,改为使用通过rsa加密的密码交换。首先来看看加密连接。

先看一张图:

上面这张图描述了SSL/TLS协议在TCP/IP模型中的位置,Mysql通过在服务端与客户端之间的连接上使用ssl/tls协议实现连接的加密。

TLS作为SSL协议的进化版,其基础也是基于RSA的身份认证与密码约定,而后使用约定密码进行数据的加密通信。为了使用TLS加密,Mysql需要使用到如下几个组件:
1,CA证书,通过使用CA证书来为server/client的数字证书进行签名,以达到server/client的相互认证;
2,server端证书,使用CA证书进行签名后的mysql服务器端证书;
3,client端证书,使用CA证书进行签名后的client端证书;mysql 虽然通常不需要对客户端身份进行认证,但是实现上是支持的;
4,OpenSSL工具包,开源社区贡献的SSL/TLS协议的代码实现。从MySQL 8.0.11 到8.0.17 ,mysql短暂支持wolfSSL 作为可选openssl实现,从8.0.18开始,wolfSSL被移除,唯一使用OpenSSL作为编译时使用的工具包;
5,mysql对于使用SSL/TLS引入的一些配置,包括加密连接开关、以及一系列系统变量:TLS协议版本、OpenSSL支持TLS不同版本使用的加密套件(Cipher/Ciphersuites)、认证类型;以及用于监控当前加密使用的状态变量、密钥生成工具等。

以上为加密连接与密码交换的基础组件。另一方面,Mysql提供了多层级的安全控制:服务层面ssl行为控制(server-client使用匹配的ssl行为,这其中的server可以是普通的用户-数据库中的数据库服务,也可以是主从复制中的主库,也可以是组复制中的dornor贡献者。相对的,client可以是用户端、从库、组复制中的加入者),用户层面针对单个用户的认证方式(通过认证插件)。

先看基础组件:

对于CA证书、server端证书、client端证书默认是由mysql在启动时在data目录下创建,并由mysql将文件名设置到对应的系统变量值上,也可以通过系统变量设置自定义的证书位置:
[root@mysql2 data]# ll|grep pem
-rw------- 1 mysql mysql       1680 Nov  2 09:11 ca-key.pem
-rw-r--r-- 1 mysql mysql       1112 Nov  2 09:11 ca.pem
-rw-r--r-- 1 mysql mysql       1112 Nov  2 09:11 client-cert.pem
-rw------- 1 mysql mysql       1680 Nov  2 09:11 client-key.pem
-rw------- 1 mysql mysql       1680 Nov  2 09:11 private_key.pem
-rw-r--r-- 1 mysql mysql        452 Nov  2 09:11 public_key.pem
-rw-r--r-- 1 mysql mysql       1112 Nov  2 09:11 server-cert.pem
-rw------- 1 mysql mysql       1680 Nov  2 09:11 server-key.pem
[root@mysql2 data]#
其中,ca.pem为CA证书,ca-key.pem为CA的私钥文件,client-cert.pem、client-key.pem分别为生成的客户端证书和私钥,server-cert.pem、server-key.pem分别为生成的服务端证书和私钥。public_key.pem、private_key.pem分别为用于密码交换的rsa公私钥。
pem证书文件内容可通过openssl x509 -text -in  xxx.pem查看。例如:openssl x509 -text -in ca.pem

安全相关的变量分为server端变量和client端变量,server端变量控制server的行为(是否使用加密连接、证书路径、支持的TLS协议版本等),client端控制client端的行为。对于主从复制以及组复制场景,mysql服务器对于用户来说可视为server端,但是作为从库(复制目标库,对于主从复制和组复制场景),则被视为客户端。

加密连接相关的系统变量如下:
server端变量:
require_secure_transport:是否启用加密连接。取值为ON/OFF。默认OFF&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值