https 原理,从头分析

问题: 在http 中,内容是明文传输的,可以很容易的被截取和篡改,如下图

https-1

解决: 为了解决http的明文传输的问题,这个时候我们可以引入对称加密算法,客户端和服务端都维护同一个密匙,用于加密和解密,如下图

https-2

这个时候的确解决了数据被截取和篡改的问题。 但是,考虑一个场景,当有多个客户端的时候,情况会如何?

https-3

如上图,如果不做任何修改,只是添加客户端的话,那每个客户端都能够取得密匙, 那密匙也就不再是密匙了,而是任何人都能轻易得到的了。数据截取又会发生了。

如何解决?可以考虑给每个client 不同的key

这个时候情况就会路下图

https-4

这种方式有什么问题吗? 很容易发现key是被明文传输的,可以暴露在互联网中的,那能怎么办呢? 对key进行加密?但是如果对key 进行加密,又要引入新的密匙,而新的密匙又要进行传输,依然会存在被截取的问题。怎么解决呢? 这个时候就要需要引入非对称加密

那么自然而然就会有一个问题需要解决,客户端如何获取公钥呢?

总的来说有两种种可能:

  1. 服务器端把公钥发送给每一个客户端
  2. 让浏览器保存所有的公钥

很明显,2 是不可能的。那只能是1. 如下图所示

https-5

但是服务器把公钥发送给客户端的时候,公钥就有可能会被掉包,这样的话,数据的截取和篡改又会发生了。

怎么办?

这时候就是现有https的解决方案了就要出场了

这时我们需要引入CA 证书的概念, 不清楚的同学可以自己去 Google 下

第一步: 需要网站到第三方机构申请CA 证书

第二部: 浏览器和服务器可以根据申请得到的CA 证书使用 Https 协议

Https 运行时序图:

https-7

在网上找到一个更好的 Https 加解密的流程图:

https-6-How-HTTPS-Works

如果还是不能理解,推荐阅读以下视频教程

youtube: 12 Public Key Infrastructure

Bilibili: 12 public key infrastructure

参考:

How Does HTTPS Work? RSA Encryption Explained

原文地址:https://www.cnblogs.com/wuyicqb/p/12728782.html