之前对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. flash builder4.7bug

    flash builder4.7项目,swc中的button实例出来有bug,解决办法: 1,把button都改成movieclip. 2,改用swf做资源.

  2. SAP 打开账期

    1.先OB52修改账期: 如下界面开得公司9000下面 7.8月份的账期 2.mmpv 关闭上两个账期 3.mmrv 查看现在账期情况

  3. laravel 事件的使用案例

    以下是我对事件使用的一些记录 创建事件 执行以下命令,执行完成后,会在 app\Events 下面出现一个 DeleteEvent.php 文件,事件就在次定义 php artisan make:ev ...

  4. 通过indexPath找到对应的cell

    在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 这个方法中通过 ...

  5. javascript学习第三课引用类型object

    主要内容: 1.object 是所有类型的基类 实例化对象: 1. var obj = new Object(); 2. var obj = {}; 设置对象属性和方法: obj.name = 'he ...

  6. Mac上的抓包工具Charles

    http://blog.csdn.net/jiangwei0910410003/article/details/41620363 $********************************** ...

  7. Struts2的值栈和对象栈

    ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) ActionContex ...

  8. NSLog函数重写

    跟C++的输出函数相比,NSlog函数有个很大的优势,就是它可以输出对象. 在实际使用过程中,我们可以通过实现description函数来实现对NSLog函数的重写 -(NSString*)descr ...

  9. ASP连接数据库登录按钮

    (1)在配置文件中加上以下代码: <connectionStrings> <add name="accessconn" connectionString=&quo ...

  10. 9月15日,YTFCloud,创业圈的技术新宠

    成都创业圈近期什么最热? 资本复苏?这本来就是高低起伏规律而已,再说动辄千万的大手笔,对于创业新人.新团队来说太遥远,早期根本无法变现,而资金紧张.项目开发费用超标.没有技术大牛保障等尖锐现实问题能否 ...