HTTPS协议传输过程

握手流程

  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,验证二者是否相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容