之前对HTTPS通信过程有过了解,HTTPS是应用HTTP协议使用SSL加密的版本,在TCP和HTTP之间增加SSL协议。通过握手阶段认证双方身份,协商对称秘钥对通信信息进行加密。此处只描述常用的服务器单向验证,大致过程简要描述如下:

0:事先Web服务器把自己的公钥和Web信息提交给权威CA,CA确认后,用自己的私钥将Web信息以及公钥的文摘签名,制成数字证书交给Web服务器;
客户端Web浏览器事先安装被信任的权威CA的根证书(未签名证书或者自签名证书)
1:客户端向服务器发起连接请求,协商使用的SSL版本、非对称加密算法、对称加密算法以及摘要生成算法,双方达成共识
2:Web服务器向客户端发送自己的数字证书,客户端用CA的根证书解密,证明Web服务器身份真实,同时证明服务器公钥正确
3:客户端用服务器公钥加密一个随机数,作为通信收发数据的对称秘钥,发送给服务器
4:服务器用自己的私钥解密,拿到对称秘钥,返回ACK
5:客户端和服务器使用对称秘钥开始通信

到学习MySQL的SSL连接配置时产生一个疑问,HTTPS有CA作为可信第三方,负责确认服务器身份,而MySQL连接通信只2方,没听说还有个CA从中协调啊,那还怎么SSL啊?

通过网上查资料,发现自己对SSL相关的很多概念理解不是很准确,对之前CA的验证方式理解不对。首先明确一些概念:

公私钥对:非对称加密算法,公钥和私钥成对出现,用公钥加密用私钥解密,用私钥加密用公钥解密

CA:证书颁发机构,通信双方可信的第三方。自己有公私钥对,网站想证明自己真实可信,但用户不相信自己,只相信CA说的,于是网站提交自己的信息和公钥给CA,CA核实网站信息和提交的公钥,觉得靠谱,于是签名,制成证书,交给网站成为一个资质。

签名:别人不知道我的私钥,但是知道我的公钥。怎么证明这文件是我认证的呢?我用自己的私钥加密,别人用我的公钥解密成功,那肯定知道是我加密的,别人干不了。具体一点,先对文本内容计算散列值,然后对这个散列值用自己的私钥加密。(别人对文本内容计算散列值,然后用我的私钥解密得到的值做对比,一致证明签名OK)

证书:包含3部分,通信方具体信息(地点、域名、组织、拥有者等)、通信方的公钥、权威CA的签名。(具体信息和公钥计算散列值,然后对这个散列值用自己的私钥加密)

根证书:权威CA也有自己的证书(毕竟需要CA的公钥来验证网站证书真伪),那CA的证书谁签名啊?毕竟没有更高一级了,所以根证书是未签名的或者是自签名的,没人给这个证书背书了,所以叫做根,是信任链的起点,都可以理解了。

再看MySQL的SSL连接配置,思考SSL通信过程,就可以理解为什么需要这些文件了(此处描述SSL单向验证模式)

MySQL服务器端要配置3个文件:ssl-ca.pem, ssl-key.pem, ssl-cert.pem

客户端连接时需要文件:ssl-ca.pem

ssl-ca.pem就充当了可信的第三方,CA根证书,文件里包含了CA的信息和公钥,客户端和服务器都有。

1.客户端向MySQL服务器发起连接请求,双方协商加密算法、SSL版本等

2.服务器向客户端发来自己的证书(ssl-cert.pem的内容,CA签名的),客户端用ssl-ca.pem的公钥解密,确认服务器身份和公钥真实。

3.客户端产生随机数作为对称加密的秘钥,用服务器公钥加密,发送给服务器

4.服务器用自己的私钥(ssl-key.pem)解密,拿到这个随机数,返回ACK

5.双方用随机数做密钥,以对称加密方式通信

举一反三,其他应用层协议使用SSL通信时,也是一样的套路了。如果有哪些地方不准确,请留言指正,感谢。

SSL在https和MySQL中的原理思考的更多相关文章

  1. 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  2. 数字证书、SSL、HTTPS及在Nginx中的配置

    一.什么是 RSA.SSL.HTTPS RSA:它是非对称加密算法的一种,而且是最常用的一种.它的理论基础是:计算两个大质数的乘积非常简单,而对该乘积进行因子分解就非常困难.而且 这两个质数越大,对其 ...

  3. MySQL中的事务原理和锁机制

    本文主要总结 MySQL 事务几种隔离级别的实现和其中锁的使用情况. 在开始前先简单回顾事务几种隔离级别以及带来的问题. 四种隔离级别:读未提交.读已提交.可重复读.可串行化. 带来的问题:脏读.不可 ...

  4. 【转】Mysql中事务ACID实现原理

    转自:https://www.cnblogs.com/rjzheng/p/10841031.html 作者:孤独烟 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" ...

  5. Mysql中主从复制的原理、配置过程以及实际案例

    Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...

  6. 【原创】Mysql中事务ACID实现原理

    引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isol ...

  7. Mysql中事务ACID实现原理

    引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?"你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isola ...

  8. Mysql 中的SSL 连接

    Mysql 中的SSL 连接 以下来自网络参考和自己测试整理,没有查找相关资料.若有错误之处,欢迎指正. 当前的Mysql 客户端版本基本都不太能支持 caching_sha2_password 认证 ...

  9. MySQL中InnoDB存储引擎的实现和运行原理

    InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表. InnoDB 体系架构 InnoDB 主要包括了: 内存池.后台线程以及存储文 ...

随机推荐

  1. iOS 地图

      MapKit框架使用前提 导入框架 导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKi ...

  2. bootstrap的日期插件datetimepicker有问题

    bootstrap的日期插件datetimepicker在chrome中会出现掉下来的现象,而且一直没找到原因,下载最新版的插件直接在各个浏览器中都会掉下来, 问题一直解决不了,转而换其他插件 htt ...

  3. 使用 IntraWeb (43) - 测试读取 SqLite (二)

    一般情况下, 数据源相关控件应该有数据模块中统一管理, 这也方便其他窗体调用; UserSessionUnit 就是一个现成的数据模块. 现在把数据源相关控件放在 UserSessionUnit 的窗 ...

  4. mormot json操作

    使用JSon只需要引用一个文件synCommons. procedure TForm1.Button1Click(Sender: TObject);var jo: Variant; i: Int64; ...

  5. POJ 2983 Is the Information Reliable? 差分约束

    裸差分约束. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #i ...

  6. php插入排序

    //php版插入排序 $arr=array('','5','3','7','6','4','8','2');     for($i=2;$i<count($arr);$i++)     {   ...

  7. NOIP2012 题解

    Vigenère 密码 这个名字实在打不来... 题解:模拟 #include <cstdio> #include <cstring> +; bool cj; int cl, ...

  8. Repeater 使用方法

    ItemTemplate: 包含要逐一呈现给数据源中的每个数据项的 HTML 元素和控件 AlternatingItemTemplate: 包含要逐一呈现给数据源中的其他每个数据项的 HTML 元素和 ...

  9. 1296: [SCOI2009]粉刷匠

    Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...

  10. json+servlet+ajax

    json-lib-2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar c ...