HTTPS协议传输过程

2019-03-07  本文已影响0人  lsh_01

握手流程

  1. 客户端发起https请求
    客户端告诉服务端支持哪些加密算法。

  2. 服务端响应

    • 选择合适的加密算法(比如:RSA、AES、MD5);
    • CA证书数字签名服务端公钥返回给浏览器。
  3. 客户端验证服务端数字签名,发送秘钥给服务端

    • 验证服务端返回的数字签名
    • 生成一个随机数 a,作为AES加密秘钥,使用服务端公钥a 加密,得到 b
    • 生成握手消息,以 a 为秘钥对其进行AES加密,得到 c
    • 计算握手消息的HASH值,得到 d
    • bcd 发送到服务端。
  4. 服务端确认加密秘钥

    • 使用服务端私钥解密 b ,得到 a
    • a 为秘钥对 c 进行AES解密,得到握手消息;
    • 计算握手消息的HASH,验证其与 d 是否一致;
    • 生成新的握手消息,以 a 为秘钥对其进行AES加密,得到 e
    • 计算新握手消息的HASH值,得到 f
    • ef 返回给浏览器。
  5. 握手过程完成,客户端发送加密数据给服务端

    • a 为秘钥对 e 进行AES解密,得到新握手消息;
    • 计算新握手消息的HASH,验证其与 f 是否一致;
    • 至此,握手过程结束。之后所有的通信数据将以 a 为秘钥进行AES加密后传输。

客户端验证服务端数字签名的流程

  1. 获取对应CA证书颁发机构的公钥
    根据数字签名信息,获取对应CA证书颁发机构的公钥。
    该公钥是被根证书颁发机构,使用其私钥加密过的。

  2. 解密并获得CA证书颁发机构的公钥
    使用本地根证书公钥,解密并获得CA证书颁发机构的公钥。
    本地根证书公钥是在用户安装操作系统时,由操作系统写入浏览器的。

  3. 解密数字签名,验证服务端公钥
    使用CA证书颁发机构的公钥,解密数字签名,得到服务端公钥的HASH。
    计算服务端公钥的HASH,验证二者是否相同。

上一篇 下一篇

猜你喜欢

热点阅读