https 原理,从头分析
问题: 在http 中,内容是明文传输的,可以很容易的被截取和篡改,如下图
解决: 为了解决http的明文传输的问题,这个时候我们可以引入对称加密算法,客户端和服务端都维护同一个密匙,用于加密和解密,如下图
这个时候的确解决了数据被截取和篡改的问题。 但是,考虑一个场景,当有多个客户端的时候,情况会如何?
如上图,如果不做任何修改,只是添加客户端的话,那每个客户端都能够取得密匙, 那密匙也就不再是密匙了,而是任何人都能轻易得到的了。数据截取又会发生了。
如何解决?可以考虑给每个client 不同的key
这个时候情况就会路下图
这种方式有什么问题吗? 很容易发现key是被明文传输的,可以暴露在互联网中的,那能怎么办呢? 对key进行加密?但是如果对key 进行加密,又要引入新的密匙,而新的密匙又要进行传输,依然会存在被截取的问题。怎么解决呢? 这个时候就要需要引入非对称加密了
那么自然而然就会有一个问题需要解决,客户端如何获取公钥呢?
总的来说有两种种可能:
- 服务器端把公钥发送给每一个客户端
- 让浏览器保存所有的公钥
很明显,2 是不可能的。那只能是1. 如下图所示
但是服务器把公钥发送给客户端的时候,公钥就有可能会被掉包,这样的话,数据的截取和篡改又会发生了。
怎么办?
这时候就是现有https的解决方案了就要出场了
这时我们需要引入CA 证书的概念, 不清楚的同学可以自己去 Google 下
第一步: 需要网站到第三方机构申请CA 证书
第二部: 浏览器和服务器可以根据申请得到的CA 证书使用 Https 协议
Https 运行时序图:
在网上找到一个更好的 Https 加解密的流程图:
如果还是不能理解,推荐阅读以下视频教程
youtube: 12 Public Key Infrastructure
Bilibili: 12 public key infrastructure
参考: