https的加密流程总结

https的加密流程总结

[TOC]

在工作中遇到了https的相关验证需求,需要是跟京东金融对接,上网上找了几个帖子了解了一下,总结了如下流程。

https说明

  • http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
  • https Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。使用TCP端口默认为443

  • ssl

常见错误理解

按照常见的理解,应该是发送方用公钥证书进行加密,然后由接收方私钥证书进行解密就可以了,但是实际上,完全不是这么处理的,这里主要有如下两个问题:

  1. RSA的非对称加密算法,效率过低,比对称算法效率低几百倍。所以全报文加密的效率会非常低下。
  2. 对于WEB应用来说,请求服务端的客户端是不固定而且数量极大,因此服务端不能与固定的客户端互相约定密钥。只能客户端获取服务端的公钥进行加密,导致的结果是服务端返回的报文是没有公钥进行加密的,而导致是明文传输。

加密流程

实际上,ssl的加密由两个部分:非对称加密和对称加密。

  • 非对称加密:用公钥对对称加密的密钥进行加密
  • 对称加密:用密钥对数据进行加密

这样可以有效的解决密钥传输的安全行问题,和RSA效率过低的问题。 大致流程如下:

  1. 客户端获取服务端公钥信息
  2. 客户端生成随机对称加密密钥,使用服务端公钥进行加密,发送给服务端。
  3. 服务端收到对称加密密钥,进行解密和返回报文的加密处理

但是实际上的流程要复杂很多,具体流程分成单向加密和双向加密两种,流程分别如下:

  • 单向加密
    
    sequenceDiagram

客户端->>服务端: 1.发送客户端SSL版本等信息 服务端-->>客户端: 2. 返回服务端公钥信息、SSL版本、随机数等 客户端->>客户端: 3. 客户端校验服务器端证书合法性(有效期、CA、摘要、域名匹配) 客户端-->服务端: 4. 客户端发送自己支持的对称加密方案 服务端-->>服务端: 5. 服务端选择加密程度高的密钥 服务端-->>客户端: 6. 将选好的加密方案以明文方式发送 客户端->>服务端: 7. 客户端收到加密方式,生成随机密钥,使用服务端公钥加密发送 服务端-->服务端: 8. 服务端使用私钥解密,获得对称密钥信息 客户端->>服务端: 9. 客户端通过对称密钥加密数据传输 服务端-->>客户端: 10. 服务端通过对称密钥返回加密数据


- 双向加密

```mermaid
sequenceDiagram

客户端->>服务端: 1.发送客户端SSL版本等信息
服务端-->>客户端: 2. 返回服务端公钥信息、SSL版本、随机数等
客户端->>客户端: 3. 客户端校验服务器端证书合法性(有效期、CA、摘要、域名匹配)

客户端->>服务端: ADD1.客户端将自己的证书和公钥发送给服务端
服务端-->服务端: ADD2.服务端对客户端的公钥进行合法性校验

客户端-->服务端: 4. 客户端发送自己支持的对称加密方案
服务端-->>服务端: 5. 服务端选择加密程度高的密钥
服务端-->>客户端: MOD6. 将选好的加密方案以 使用客户端公钥加密 发送
客户端->>服务端: 7. 客户端收到加密方式,生成随机密钥,使用服务端公钥加密发送
服务端-->服务端: 8. 服务端使用私钥解密,获得对称密钥信息
客户端->>服务端: 9. 客户端通过对称密钥加密数据传输
服务端-->>客户端: 10. 服务端通过对称密钥返回加密数据

CA的作用

CA的作用主要是防止中间人的情况,即有人中途截取客户端和服务端的报文,具体流程如下

sequenceDiagram

客户端->>中间人: 1. 客户端以为发送给了客户端信息,实际是中间人的信息
中间人->>服务端: 2. 服务端以为是客户端发来的信息,实际是中间人的信息
服务端-->中间人: 3. 服务端返回信息,中间人做篡改,改成中间人的信息,再返回客户端
中间人-->客户端: 4. 客户端收到的实际是中间人篡改的密文,再用中间人的密钥验证

CA是可以信赖的根证书,所有人的证书都要从CA获取。这样中间人的证书,就不会被CA认证,即使认证了,证书中也包含的是中间人的证书信息,而不是服务端的信息,可以有效的保证安全性。

因此,从理论上讲,如果CA不具有信任度,那么安全性同样无法保障。

参考文档

整体描述-https://mp.weixin.qq.com/s/StqqafHePlBkWAPQZg3NrA

流程描述-https://blog.csdn.net/superviser3000/article/details/80812263