• 计算机网络 | 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 握手解析

  • 相关阅读:
    轻松与任何 SQL 数据库集成:Directus 助你无代码开发 | 开源日报 No.69
    WoShop分销积分直播短视频商城全开源无加密商城源码
    【附精彩文章合辑】CriticGPT的优缺点分析
    RabbitMQ - 消息队列协议
    【Java八股文总结】之消息队列
    【无标题】
    C++语言的广泛应用领域
    进程管理学习
    适配器模式是个啥,在Spring中又用来干啥了?
    Simple Audit Check List for ESD Control Program
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126132911