HTTPS

Page content

20200727220356

因为目前的工作是与对象存储相关的,所以与HTTP协议打交道还算比较多,对HTTP一些基本的概念有一定了解,但是始终没有自己完整厘清过HTTPS的工作流程,今天整理一下思路。

HTTP存在的问题

HTTPS协议不是新的协议,而是在HTTP基础上,中间加了一层SSL协议。

HTTPS的出现时为了解决HTTP的什么问题呢?

  1. 数据私密性:数据是明文传输的,容易被别人窃听、偷看。
  2. 数据完整性:报文可能被篡改。
  3. 不验证对方的身份:可能遭到伪装。

接下来,会分别介绍HTTPS是如何解决这三个问题的。

解决内容为明文问题——加密

加密,可以用对称加密、非对称加密来分类。

对称加密

加密和解密都使用同一个密钥。

优点是,加解密效率高,使用方便。问题是,密钥的传输无法在互联网环境下安全进行。

非对称加密

非对称加密需要一个密钥对:公钥、私钥。

公钥是随意发布到互联网上的,私钥则是接收信息方自己保存,从不外泄。发送信息方,使用公钥加密信息,接收方通过私钥解密。信息都是通过公钥加密,通过私钥解密,所以只有接收方才能真正得知信息的内容。

但是非对称加密也是有问题的:

  1. 首先非对称加密是单向通信的,只有服务器端有私钥。在现实情况中,服务器和客户端是互相通信的,不能要求每个客户端都有私钥。
  2. 非对称加密效率更低,对CPU的消耗更多。

HTTPS的情况

简而言之,通过非对称加密传输对称加密密钥。

  1. 客户端将对称加密密钥,通过非对称加密密钥加密,传输给服务器端
  2. 服务器使用私钥解密,得到对称加密密钥
  3. 双方使用这个对称加密密钥通信。

解决报文完整性问题——数字签名

非对称加密和对称加密结合的方式解决了数据私密性问题,别人看不到我的数据内容了。

但是呢,他们依旧能被篡改。所以需要数字签名来保证数据的完整性。

数字签名有两个作用:

  1. 能确定消息是被发送方发出的,因为别人模仿不了这个签名。 2。 数字签名是通过内容签出来的,所以能够验证数据是否被篡改。

传输过程如下:

  1. 发送方对内容取hash,获得消息摘要
  2. 发送方用私钥对消息摘要进行加密,生成数字签名
  3. 接受方用公钥对数字签名进行解密,获得数字摘要
  4. 接受方对内容进行hash,获取到消息摘要,与上面的摘要进行对比

解决通信对方可能被伪装的问题——数字证书

在数字签名一节中,我们说道,接受方会用对方的公钥进行解密,但是公钥不能随内容一起传过来,否则也就不靠谱了。这个时候就需要一个权威的第三方机构来存放公钥。

这个公钥不怕别人知道,唯一的作用就是让接受方知道,这个公钥是真的。

最后,HTTPS的流程如下图(盗图): 20200728210944

参考

HTTPS原理详解 深入理解HTTPS工作原理