目录
[1、HTTPS 的概念](#1、HTTPS 的概念)
[2、" 加密 "是什么](#2、“ 加密 ”是什么)
[二、HTTPS 的工作过程](#二、HTTPS 的工作过程)
一、HTTPS
1、HTTPS 的概念
HTTPS = HTTP + 加密(TLS / SSL)
HTTP :明文传输,不安全容易被篡改、劫持、窃听
HTTPS :也是一个应用层协议,在HTTP的基础上用 SSL / TLS 协议加密通信,可靠、完整、加密、可信
运营商劫持情况:
比如我们在浏览器下载一系列软件时,点击高速下载------>会下载应用宝 / 乱七八糟的软件,绝大多数就是运营商HTTP劫持,HTTPS 运营商劫持不了
2、" 加密 "是什么
明文 :要传输的原始数据
加密 :将明文进行了一系列变换之后生成密文
解密 :将密文再进行一系列变换还原成明文
加密和解密的过程中会使用到一个特殊的数据:密钥
二、HTTPS 的工作过程
1、引入对称加密
是通过同一个 " 密钥 ",把明文加密成密文,把密文解密成明文
一个简单的对称加密:
**密钥 :**所有字母向后移动三位
明文:ABC
加密:DEF(密文)
**解密:**同样密钥,向前移动3位,密文变回明文ABC
客户端 / 服务器生成一个密钥,让对方也持有这个密钥,客户端发送给服务器的数据就使用这个密钥进行加密,服务器使用这个密钥对客户端发送的数据进行解密
流程:
但服务器要处理很多不同客户端的请求,必然不可能使用同一个密钥,那么就可以让客户端随机生成一个对称密钥然后**通过网络传输给服务器,**那么将密钥传输的过程有极大可能被黑客拦截
那么我们再次使用对称加密吗?显然肯定不行,在嵌套的对称加密密钥还是会被窃取,那么我们就需要引入非对称加密了
2、引入非对称加密
非对称加密要用到两个密钥:一个 " 公钥 "、一个 " 私钥 "
公钥和私钥是配对使用的,最大缺点为运算速度慢,比对称加密慢的多
使用:
- 常规使用公钥加密,私钥解密。也可以反着用
服务器生成公钥和私钥,然后将公钥发放出去:
- 客户端在本地生成对称密钥,使用公钥对其进行加密,发送给服务器
- 由于中间网络设备没有持有私钥,即使截获了数据,也无法对其进行解密,获取到对称密钥
- 服务器通过私钥对客户端发送的请求进行解密后使用这个对称密钥进行加密并返回响应
- 后续双方使用对称密钥进行数据传输即可,因为只有双方知道
那么只使用非对称加密是否可以?
非对称加密对资源的占用多,效率低,所以我们使用非对称加密来加密对称密钥,规避掉开销大的问题,由于对称密钥已经到达对方, 所以我们之后使用对称密钥加密也同样安全
上述方案其实存在 " 致命缺陷 ",接下来我们介绍黑客如何进行攻击
3、中间人攻击
服务器可以生成公钥和私钥,那么黑客也可以生成公钥和私钥
流程:
- 客户端向服务器发起请求,服务器明文传输公钥给客户端
- 在传输过程中,黑客截取服务器的数据报文并保存公钥 ,将报文中的公钥改为自己的公钥并打包 (伪造)发送给客户端
- 客户端收到报文 ,提取公钥(并不知道公钥已经被替换),自己形成对称密钥,使用黑客的公钥进行加密,形成报文并发送给服务器
- 中间人劫持后, 使用自己的私钥进行解密,再用之前保存的服务器公钥进行加密,将报文发送给服务器
- 服务器拿到报文,用私钥进行解密
- 双方开始使用对称密钥进行数据传输,但中间人已经知道对称密钥,对数据进行修改、窃取都可以
那么我们如何应对中间人攻击?
4、引入证书
数字证书(SSL / CA 证书)
**概念:**把某人 / 某网站的公钥,盖上权威机构(CA)的公章,证明这个公钥确实属于它,不是伪造的
证书中主要包含这些东西:
1、使用者(域名/人名) 2、它的公钥 3、有效期
4、颁发机构 5、CA使用自己私钥做的签名(核心)
流程:
- 在客户端和服务器进行连接时,服务器给客户端返回一个证书
- 这个证书包含了公钥,也包含了网站信息
那么黑客是否可以对 pub3 进行中间人攻击呢?
答案是不可以,pub3 不是通过网络传输的,而是操作系统内置的
客户端会对证书的真实性进行验证:
- 客户端使用同样的算法计算校验和 check1
- 客户端使用公证机构的公钥(pub3)对签名进行解密得到校验和 check2
- 判断check1==check2 ,如果相同证书有效
三、总结流程
客户端和服务器流程:
HTTPS工作过程涉及的密钥有三组:
- 非对称加密:用于验证证书是否被篡改,客户端持有公钥,服务器持有私钥,服务器使用这个私钥对证书的签名进行加密,客户端通过公钥进行解密和校验是否有效
- 非对称加密:用于协商生成对称加密的密钥,服务器生成公钥------私钥对,通过证书传递公钥给客户端,客户端使用公钥对对称密钥进行加密,传输给服务器,服务器通过私钥解密获取到对称密钥
- 对称加密:服务器和客户端后续的传输都使用这个对称密钥进行加密和解密







