目录
[3.1 先引入对称加密](#3.1 先引入对称加密)
[3.2 非对称加密](#3.2 非对称加密)
[3.3 中间人攻击](#3.3 中间人攻击)
[3.4 引入公正机构](#3.4 引入公正机构)
上一篇文章我们学习了HTTP协议,本篇文章我们学习HTTPS协议。
1.定义
HTTPS是什么
HTTPS也是⼀个应用层协议.是在HTTP协议的基础上引入了⼀个加密层.
HTTP协议内容都是按照⽂本的方式明文传输的.这就导致在传输过程中出现⼀些被篡改的情况.
明文 + 密钥 =》 密文
密文 + 密钥 =》 明文
2.加密
在密码学中,使用密钥加密,主要有两种方式:
1.对称加密,加密和解密,使用的密钥,是同一个密钥
设密钥为key
明文 + key => 密文
密文 + key => 明文
2.非对称加密,有两个密钥(一对),一个称为"公钥",一个称为"私钥"
用一个钥匙加密,用另一个钥匙解密
明文 + 公钥 => 密文 明文 + 私钥 => 密文
密文 + 私钥 => 明文 密文 + 公钥 => 明文
3.HTTPS的工作过程
目标,针对HTTP这里的header和body进行加密
3.1 先引入对称加密
在上述模型中,服务器不是只和一个客户端通信,而是和很多客户端通信,每个客户端的密钥都不相同,彼此之间才能不知道对方的密钥是啥
此时要求每个客户端对应的密钥都不同,现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来(此处涉及到一些随机数机制,以保证每个客户端生成的密钥都不同),客户端再把自己的密钥通过网络传输给服务器。此时很可能被黑客截获
如何让密钥更安全的到达服务器呢?
为了解决上述安全传输密钥的问题,引入了非对称加密
3.2 非对称加密
为什么不直接使用非对称加密,还要有对称加密?
进行非对称加密/解密,运算成本是比较高的,运算速度也是比较低的,而对称加密,运算成本低,速度快
使用非对称加密,只是用来进行这种关键环节(传输密钥),成本就比较可控,后续要传输大量的业务数据,都使用效率更高的对称加密,比较友好的做法。如果业务数据都使用非对称加密,整体的传输效率就会大打折扣了
上述 对称加密 + 非对称加密 过程就是HTTPS的
但是上述过程还存在严重的漏洞
3.3 中间人攻击
如何解决上述中间人攻击的问题?
之所以能进行中间人攻击,关键要点在于客户端没有"分辨能力"
3.4 引入公正机构
客户端拿到证书,也就拿到了证书中的公钥
客户端就需要验证这个公钥是否是服务器最初的公钥(是否被黑客篡改了)
这个过程就叫做"证书的校验"
如何进行校验?核心机制,就是"数字签名" -> 被 加密 后的检验和(拿着你数据的每个字节,代入公式,就能算出来一个结果数字,称为校验和,把这个校验和一起发送给对方,对方再按照同样的方式再计算一遍校验和,如果结果一致,就认为数据在传输的过程中,没有改变过)
此时,客户端拿到了数字签名,就可以通过系统内置的公证机构的公钥,进行解密了,得到最初的校验和
客户端再重新计算一遍这里的校验和和解密出来的校验和进行对比,如果校验和一致,就可以认为证书没有被篡改过,公钥就是可信的
那么黑客替换公钥之后,能否自己替换掉数字签名,自己算一个呢? -> 不能
校验和好算,针对校验和加密,需要使用公正机构的私钥,才能进行的
4.完整流程
5.总结
https加密:(面试中的经典面试题)
1.对称加密,加密业务数据
2.非对称加密,加密对称密钥
3.中间人攻击
4.使用证书,校验服务器中的公钥
这样一系列流程,是由SSL这样的协议来规定的(SSL后来改名成了TLS)不仅仅用于HTTPS中,也被用到了很多其他的场景里