MySQL的SSL加密连接问题,突然就连上Mysql怎么办?这里告诉你一种存在的可能

背景

        这是一个生产问题引发的我对MySQL的SSL的认识,今年年初遇到一个mysql的问题,由于公司内业务系统升级关闭了mysql的SSL认证,导致mysqlWorkBench 和 程序无法正常连接到该MySQL数据库。虽然在知道原因之后来看好像很简单,但是排故过程其实非常困难,因为你不知道业务系统升级了做了什么操作。你的系统还需要连接它的数据库,虽然这样不规范,但是某些情况我们为了上线效率或其他商务原因,只有一定程度上容忍这种不规范。规范操作是原有系统提供接口我们调用该系统提供的接口即可,这样无论原系统如何变,只要接口满足之前的规范,第三方系统都不会被原系统升级而导致改变。(出了这次故障,进一步明白系统之间的交互应该严格遵守使用接口交互,不应直连数据库)扯远了,回到本次故障解决上面来

解决办法

        其实由于MySQL服务默认安装是开启了SSL加密连接服务的,所以我们一般在数据库建立链接的时候默认 useSSL为true,所以很少有人会注意到这么小的一个配置它的意义,也许就是以前项目这么配置连接MySql,为了方便这次我也直接复制了之前的链接字符串,一开始还是成功链接,当你的程序上线一段时间,如果源系统升级改了MySQL的一些配置,就比如这次它关闭了SSL链接认证,立马你的程序就会出现连接数据库异常,解决办法其实很简单,如果 MySQL关闭SSL服务,那么在程序链接字符串需要加上 &userSSL=false

如果你使用的是MySQL的配置文件(比如my.cnf或my.ini),你可以添加或修改以下配置来关闭SSL:

[mysqld]
ssl = 0

回想一下:

        为什么MySQL要提供SSL链接呢?其实一般mysql都部署在内网,外网是无法直接访问的,我们还需要应用加密区链接mysql么?

        普遍的做法,安装好数据库之后为该项目创建一个用户,并授予权限,然后我们在项目中直接使用用户名和密码直接连接mysql数据库,这样安全么?

        好的情况,我们可以将这些敏感的配置信息进行加密存储,可问题是我们通常的加密其实是一个可逆的,密钥和密文都放在一起,程序在于Mysql建立连接的时候,还是需要先解密,然后密文传输到Mysql服务器上,建立数据库连接,其实也就是增加了破解密码的难度,通过代码不能一目了然的看大密码(虽然可以解密),但是将网络请求拦截下来,数据库建立的请求以及数据库查询和返回的内容都是明文传输的,存在着不安全。

Mysql怎么做的呢?

        其实Mysql引入了类似于HTTPS一样的协议,就是SSL来解决传输加密,使用这一套机制可以保证Mysql在数据传输加密,内容不被篡改

        SSL:表示mysql服务允许加密连接,这个参数在mysql8.0 是默认启用的,MySQL启动的时候自动生成SSL证书、密钥文件,以及RSA密钥对文件;或者使用mysql_ssl_rsa_setup生成

MySQL的SSL建立过程

1.客户端发起 ssl 连接请求;

2.MySQL Server 发送数字证书 server-cert.pem 给客户端(server-cert.pem包含:服务器公钥、CA签名信息);

3.客户端使用CA 证书 ca.pem(由于这是 MySQL 自签名的CA证书,无法从操作系统的可信任区获取(压根不在这里边),所以事先必须在客户端本地保存 CA 证书文件中的 CA 公钥解密 server-cert.pem 中的签名,进行验证;

4.验证通过后,生成对称密钥,使用 server-cert.pem 中的公钥加密“对称密钥”,发送给 MySQL Server;

5.MySQL Server 使用自己保留的私钥 server-key.pem 解密,得到“对称密钥”;

6.接下来传输数据则使用“对称密钥”进加密和解密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scalzdp

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值