• 计算机网络 | 05.[HTTP] SSL/TLS握手过程


    1. SSL/TLS 四次握手

    HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49

    image-20220802180223510

    TLS四次握手的最终目的是通过安全的方式生成「会话秘钥」。

    会话秘钥」的生成需要以三个随机数 Client Random、Server Random、pre-master key 作为材料,再用商定好的加密算法计算得到。整个流程客户端一共发出4个消息,收到6个消息。

    • 第一次、第二次握手中,双方各自生成 随机数 ,确定 TLS版本 和 加密算法,同时服务端将 证书 发给客户端;
    • 客户端验证证书后开始第三次握手,客户端生成 预主密钥,并通过证书中的 公钥 加密后发送给服务端,双方根据两个随机数和预主密钥生成 会话密钥,握手结束。

    1.1. 第一次握手

    客户端发起 [ClientHello] 消息,该消息包含:

    • 客户端支持的 SSL/TLS 协议版本(如"TSL1.2");

    • 客户端生成的随机数 Client Random

    • 客户端支持的密码套件列表(如"RSA加密算法")。

    1.2. 第二次握手

    服务器收到客户端发起的消息后,向客户端发出 [ServerHello] 消息,其中包含:

    • 本次加密通信确定使用的 SSL/TSL 协议版本;

    • 服务端生成的随机数 Server Random

    • 本次加密通信确定使用的加密算法;

    随后,服务端又连续发送三个消息:

    (1) [Certificate] 内含服务器证书;

    (2) [Server Key Exchange] 内含服务器公钥

    (3) [Server Hello Done] 告知客户端响应结束。

    1.3. 第三次握手

    客户端收到消息后,会使用内置的「CA公钥」解密数字证书,验证数字证书的真伪。当确认数字证书没有被伪造,就会生成 pre-master key ,并结合先前生成的两个随机数,根据加密算法计算出「会话秘钥」。随后客户端连续发起三个消息:

    (1) [Client Key Exchange] 内含客户端生成的 pre-master key会被「服务器的公钥」加密

    (2) [Change Ciper Spec] 告知服务端随后的消息都改用「会话秘钥」加密通信;

    (3) [Encrypted Handshake Message] 告知服务端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给服务端验证握手过程中信息是否有被篡改。

    1.4. 第四次握手

    服务端收到消息后,利用已有的两个随机数和 pre-master key,根据加密算法计算出「会话秘钥」,并连续发起两个消息:

    (1) [Change Chipher Spec] 告知客户端随后的消息都改用「会话秘钥」加密通信;

    (2) [Encrypted Handshake Message] 告知客户端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给客户端验证握手过程中信息是否有被篡改。

    2. RSA握手

    2.1. RSA握手流程

    与上文提到的完全一致,其中 pre-master key 是客户端随机生成的一个随机数。

    2.2. RSA握手的缺陷

    不支持前向保密:由于最后的 pre-master key 是客户端使用公钥加密后传递给服务端的,服务端再使用私钥解密,就能重新得到 pre-master key。而一旦服务器的私钥被泄露,过去截获的所有TLS密文都将被破解。

    3.ECDHE握手

    3.1. ECDHE握手的特点

    支持前向保密:由于每次通信使用的 私钥 都是 不同的,因此某一次通信的私钥被泄露并不会造成太大的影响。

    提前通信:客户端无需等到服务端完成最后一次 TLS握手,就可以 提前发送 加密的HTTP数据了。

    参考资料

    HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49

    小林coding - HTTPS RSA 握手解析

    小林coding - HTTPS ECDHE 握手解析

  • 相关阅读:
    雪花算法生成主键ID
    开源风暴吞噬AI界?从Stable Diffusion的爆火说起
    回调函数c++
    双相情感障碍会变精分吗?精神科医生为您答疑
    C++行为型模式-职责链模式
    sql中select查询大数据量表时很慢
    基于STM32与FreeRTOS的消息传递详解(HAL库)
    Android实时通信:WebSocket与WebRTC的应用与优化
    copy archived log from ASM 异地恢复归档
    怎么设定make的默认目标
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126132911