一、理解HTTPS协议
HTTPS 也是一个应用层协议 . 是在 HTTP 协议的基础上引入了一个加密层。
HTTP 协议内容都是按照文本的方式明文传输的 . 这就导致在传输过程中出现一些被篡改,所以出现了HTTPS协议的加密协议,保证数据安全。
二、加密解密
1、理解
2、加密方式分类
(1)对称加密
加密解密用同一个密钥。
常见对称加密算法 : DES、3DES、 AES 、 TDEA 、 Blowfish 、 RC2 等。
特点:算法公开、计算量⼩、加密速度快、加密效率⾼。
(2)非对称加密
一共有两个密钥,一个公钥,一个私钥。公钥可以明文传递,但是私钥只有少数人知道,而且一定不能让其他人看到。
明文用公钥加密,就只能用对应的私钥解密,反之亦然。
常见非对称加密算法 : RSA , DSA , ECDSA
特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
三、四种失败方案介绍
流程:首先客户端发送请求,只有服务端发挥加密应答之后才能开始数据传输。后续画图省略客户端第一次请求。
1、只用对称加密
2、只用非对称加密
3、双方都用非对称
4、非对称加密和对称加密
四、中间人攻击
其实我们在客户端与服务器之间数据传输一定要经过中间人,所以明文传送的数据一定会被中间人知道。
第四种方案仍然有安全问题,那就是中间人劫持公钥S
具体流程如下:
先服务器传递公钥S,被中间人劫持并保存,中间人给客户端他的公钥M, 由于客户端不清楚公钥的合法性,只会知道收到了一个公钥, 然后加密通信密钥,再被中间人用私钥M' 拿出通信公钥,中间人再用公钥S加密传递给服务器,伪装成客户端收到了公钥S并且加密返回,实际上客户端收到的是公钥M。
所以最根本的问题就是客户端无法验证传来的公钥是否合法。
五、数据摘要与证书
如何解决上面客户端无法验证公钥合法的问题呢?
1、数据摘要 / 数据指纹
用单散列的哈希函数对信息进行运算,形成固定长度的数据摘要。
注意:数据摘要不是加密算法,因为经过哈希算法的数据是不可逆的,很难进行恢复。数据摘要是来判断原文数据是否被篡改的方法,因为如果原文只是有一点小小的改动经过哈希算法之后会变得极不一样。
摘要常见算法:有 MD5 、 SHA1 、 SHA256 、 SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
应用:用户提交用户名密码时,服务器把密码变成摘要,去后台对比相同用户名的密码数据摘要是否一致,不一致不通过。
2、数字签名
数据摘要经过加密就是数字签名。
3、证书
上图提到的CA机构就是一个权威机构,用来给网站签名发证书,里面包含了网站的公钥,域名,证书过期时间等,客户端第一次请求时拿到证书,这样就能保证服务器公钥会被客户端知晓,进而判断公钥是否被中间人篡改。
具体密钥协商流程如下:其中3.签发证书和5.验证证书对应上图CA机构签名和客户端验证
所以客户端一定要内置CA机构或者子机构的公钥Q,对签名解密来验证证书中服务器公钥是否被篡改。CA机构持有大家公认的公钥对应的私钥,所以只有他才有签名的能力。
六、第五种HTTPS协议完整流程
经过第五部分就可以得出HTTPS协议完整流程(只不过就是在方案四的基础上加上证书)