{{ item.name }}
{{ item.name }}

{{ it.name }}

{{ it.text }}

{{ it.name }}

{{ innerIt.name }}

{{ innerIt.text }}

{{news.time}}
{{news.title}}
MySQL : SSL 连接浅析
2022-03-18发布 2,605浏览

TLS or SSL ?

SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,最初是由网景公司(Netscape)研发,后被 IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC 里包含了很多互联网技术的规范。

起初是因为HTTP在传输数据时使用的是明文(虽然说 POST 提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL 是基于 HTTP 之下 TCP 之上的一个协议层,基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 是 HTTP+SSL/TCP的简称。

由于 HTTPS 的推出受到了很多人的欢迎,在 SSL 更新到 3.0 时,IETF 对 SSL3.0 进行了标准化,并添加了少数机制(但是几乎和 SSL3.0无差异),标准化后的 IETF 更名为 TLS1.0(Transport Layer Security 安全传输层协议),可以说 TLS 就是 SSL 的新版本 3.1 。

TLS(Transport Layer Security)是更为安全的升级版 SSL。但 SSL 这一术语更为常用,实际上 MySQL 使用的就是 TLS 协议,而不是 SSL 协议。

一. TLS 握手过程

1. TLS 握手过程,其实就是秘钥交换的过程,这也是整个TLS 加密技术里最复杂的一个环节。

2. 密钥算法

对称密钥算法:数据加密和解密时使用相同的密钥。非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。利用公钥(或私钥)加密的数据只能用相应的私钥(或公钥)才能解密。与非对称密钥算法相比,对称密钥算法具有计算速度快的优点,通常用于对大量信息进行加密(如对所有报文加密);而非对称密钥算法,一般用于数字签名和对较少的信息进行加密。

3. 数字证书-如何保证公钥的真实性? 如果有攻击者伪造了 Server 端的公钥并发了客户端,客户端会访问到假网站被窃取信息。显然保证客户端收到的 Server 端的公钥是真实的,是保证整个加密连接可靠性的第一道防线。

数字证书的验证流程:

客户端会使用同样的 Hash 算法获取该数字证书的 Hash 值 H1;

通常浏览器和操作系统中集成了 CA 证书(包含 CA 公钥、所有者),客户端取得这个CA证书,使用其中的 CA 公钥解密签名,得到一个 Hash 值 H2 ;

比较 H1 和 H2,如果值相同,则数字证书可信。

二. MySQL SSL 加密连接

1. MySQL服务端的配置

启动参数:

--ssl:表示 MySQL 服务端允许加密连接,这个启动参数 MySQL8.0默认启用

系统变量:

require_secure_transport:指定是否要求客户端使用加密连接。默认值为 OFF,如果 ON,则表示客户端必须使用加密连接,如果客户端关闭 ssl ,则连接会报错。

以下参数指定加密连接时使用的证书和密钥文件:

ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem

2. MySQL客户端配置

MySQL 客户端连接 Server 时,通过 --ssl-mode 参数指定:

--ssl-mode=PREFFERED,默认行为,client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接

--ssl-mode=REQUIRED时,Client 端需要加密连接,如果无法构建连接,则 Client 端将失败

--ssl-mode=DISABLED,Client 端使用未加密的连接

--ssl-mode=VERIFY_CA,Client 端需要加密连接,并且还对 CA 证书进行验证

--ssl-mode=VERIFY_IDENTITY,Client 端需要加密的连接,并且还针对 CA 证书和其证书中的服务器主机名执行验证

3. MySQL SSL 连接中的 TLS 握手过程

上述示例已有详细说明,这里再简要总结一下:

客户端发起 ssl 连接请求;

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

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

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

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

上一篇
何时需要手动刷新授权表
400-820-6580 13916131869
marketing@actionsky.com
上海市闵行区万源路2138号泓茂中心2号楼
产品详情
关系型数据库
AI数据库
数据库智能管理平台
数据库生态产品
行业案例
金融行业
新零售行业
制造业
通信行业
更多
公司动态
最新新闻
国产化信息
技术分享
关于我们
公司简介
公司分布
国家专利
资质认证
扫码关注公众号
© Copyright 2017, All rights reserved by: 上海爱可生信息技术股份有限公司 沪ICP备12003970号-1 | 法律声明 | 网站地图
沪公网安备 31010402003331号