在上篇文章中一文带你了解HTTP协议,我们一起学习了HTTP协议的相关知识,下面让我们再一起来学习下HTTPS的有关知识吧😊😊😊
HTTPS 相当于 HTTP 的孪生兄弟,HTTPS 在 HTTP 的基础上,引入了一个加密层,HTTP 协议内容都是按照文本的方式明文传输的, 这就导致在传输过程中出现一些被篡改的情况。
这就不得不提到臭名昭著的运营商劫持:比如要下载一个 天天动听,未被劫持的效果是点击下载按钮,就会弹出天天动听的下载链接;然而如果是被劫持的效果,那么点击下载按钮,就会弹出其他软件的下载链接。

之前的HTTP 是明文传输的,传输的数据是容易被获取的,也是容易被篡改的,从而引入了HTTPS ,对数据进行了加密,也就能更好的保护数据安全了。
加密: 就是把明文(要传输的信息)进行一系列变换,生成密文
解密: 就是把密文再进行一系列变换, 还原成明文
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程, 这样的数据称为 密钥 。
既然要保证数据安全,就需要进行 “加密”(HTTPS中引入的加密层,称为SSL(旧的叫法)/TLS(新的叫法));
网络传输中不再直接传输明文了, 而是加密之后的 “密文”;
加密的方式有很多, 但是整体可以分成两大类:对称加密 和 非对称加密
对称加密: 使用同一个密钥,既可以进行加密,也可以进行解密

上述的过程看起来是挺美好的,但是存在一个致命缺陷,就是如何保证客户端和服务器持有同一个密钥呢❓🤔 尤其是一个服务器,对应有很多客户端的时候


经过上述探讨,就明确了,使用对称加密最大的问题就是在于说,密钥能够传递过去,如果是明文传输是不行的,我们必须得针对这个密钥在进行加密
所以这里就需要引入非对称加密
非对称加密: 有两个密钥,分别叫做公钥和私钥。
公钥: 就是人人都能够获取到;
私钥: 就是只有自己才知道。
我们就可以使用公钥来加密,使用私钥来解密;或者是使用私钥来加密,使用公钥解密。
直观上理解公钥和私钥:
就像是很多小区单元门口的"信箱",你有一把钥匙和很多把锁头,你把这些锁头(公钥)发给送信小哥,每一个送信的小哥都可以凭借这些锁头,把信锁到你的信箱里,只有你自己持有这把钥匙(私钥)能够开箱,拿出信。
基于非对称加密,就可以让服务器生成一对公钥私钥,公钥发出去(人人都能拿到),私钥自己保存
客户端生成一个对称密钥,客户端就可以使用服务器的公钥,对 对称密钥进行加密,然后把数据传给服务器,服务器在用私钥解密。

上诉过程也是看起来好像很完美,其实里面还是有漏洞的,那就是服务器要把自己的公钥返回给客户端,在这个操作当中,就可能会涉及到一个非常经典的"中间人攻击"。
中间人攻击

上面这是正常情况下,黑客没搞事情的情况下

既然存在了中间人攻击,那么如何解决这个问题呢❓🤔
关键就是,得让客户端知道当前的公钥是否真的是来自于服务器的,而不是黑客伪造的。
想想看,生活中其他场景是怎么验证的❓❓❓
例如:你去网吧,或者去住小旅馆,需要进行身份登记,那么如何验证你的身份呢?你要有身份证,网管就会拿着你的身份证刷一下,这一刷,其实就是在访问公安局的相关服务器,验证你的身份信息。
因此,就需要引入了一个第三方机构,来证明这个公钥是一个合法的公钥,因为咱们是信任这个公信机构的(就像咱们信任警察叔叔一样),公信机构说这个公钥ok,那我们就可以认为这个公钥可信。


HTTPS 在 HTTP 基础上引入了加密层,基于SSL/TLS来进行加密的
对称加密: 用来加密业务数据
非对称加密: 用来加密对称密钥
引入证书: 引入第三方公信机构
然后这整个加密过程,与其说是去防止数据被拦截,不如说更重要是防止数据被篡改
既然HTTP 数据已经经过加密了,为啥 fiddler 仍然能抓住并解析 HTTPS 里的数据报❓🤔
之所以 fiddler 可以抓包,是我们在最开始时安装fiddler 时说过,第一次启用HTTPS功能的时候,弹出的那个对话框是密切相关的,我们一定要点 “是”
这里的点 “是” 操作,其实就是让操作系统能够信任 fiddler 提供的证书,相当于就是给 fiddler 授权,允许fiddler 进行 “中间人攻击”

