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