HTTPS中的TLS和TCP能同时握手吗

  • 一般情况下,不管 TLS 握手次数如何,都得先经过 TCP 三次握手后才能进行

  • 因为 HTTPS 都是基于 TCP 传输协议实现的,得先建立完可靠的 TCP 连接才能做 TLS 握手的事情。

  • 「HTTPS 中的 TLS 握手过程可以同时进行三次握手」对不对呢?

    • 是可能发生的,但是需要在特定的条件下才可能发生,如果没有说任何前提条件,说这句话就是在耍流氓。

      • 客户端和服务端都开启了 TCP Fast Open 功能,且 TLS 版本是 1.3;

      • 客户端和服务端已经完成过一次通信。

    • 什么是 TCP Fast Open?

      • 常规的情况下,如果要使用 TCP 传输协议进行通信,则客户端和服务端通信之前,先要经过 TCP 三次握手后,建立完可靠的 TCP 连接后,客户端才能将数据发送给服务端。

      • TCP 的第一次和第二次握手是不能够携带数据的,而 TCP 的第三次握手是可以携带数据的,因为这时候客户端的 TCP 连接状态已经是 ESTABLISHED,表明客户端这一方已经完成了 TCP 连接建立。

      • TCP Fast Open 是为了绕过 TCP 三次握手发送数据,在 Linux 3.7 内核版本之后,提供了 TCP Fast Open 功能,这个功能可以减少 TCP 连接建立的时延。

      • 要使用 TCP Fast Open 功能,客户端和服务端都要同时支持才会生效。

      • 开启了 TCP Fast Open 功能,想要绕过 TCP 三次握手发送数据,得建立第二次以后的通信过程。

      • 第一次客户端和服务端通信的时候,还是需要正常的三次握手流程。随后,客户端就有了 Cookie 这个东西,它可以用来向服务器 TCP 证明先前与客户端 IP 地址的三向握手已成功完成。

    • TLSv1.3

      • TLSv1.3 握手过程只需 1-RTT 的时间,它到整个握手过程

        • TCP 连接的第三次握手是可以携带数据的,如果客户端在第三次握手发送了 TLSv1.3 第一次握手数据,是不是就表示「HTTPS 中的 TLS 握手过程可以同时进行三次握手」?。

          • 不是的,因为服务端只有在收到客户端的 TCP 的第三次握手后,才能和客户端进行后续 TLSv1.3 握手。

        • TLSv1.3 还有个更厉害到地方在于会话恢复机制,在重连 TLvS1.3 只需要 0-RTT

    • TCP Fast Open + TLSv1.3

      • 在第二次以后到通信过程中,客户端可以绕过三次握手直接发送数据,而且服务端也不需要等收到第三次握手后才发送数据。

      • 如果 HTTPS 的 TLS 版本是 1.3,那么 TLS 过程只需要 1-RTT。

      • 因此如果「TCP Fast Open + TLSv1.3」情况下,在第二次以后的通信过程中,TLS 和 TCP 的握手过程是可以同时进行的。

      • 如果基于 TCP Fast Open 场景下的 TLSv1.3 0-RTT 会话恢复过程,不仅 TLS 和 TCP 的握手过程是可以同时进行的,而且 HTTP 请求也可以在这期间内一同完成。

    • 总结

      • HTTPS 是先进行 TCP 三次握手,再进行 TLSv1.2 四次握手

  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TLS(Transport Layer Security)是一种用于保护网络通信的安全协议。它可以在应用层和传输层之间提供加密和认证功能。下面是TLS建立TCP连接的过程: 1. 客户端发起握手:客户端向服务器发送一个ClientHello消息,其包含支持的TLS版本、支持的加密算法和其他握手参数。 2. 服务器回应握手:服务器收到ClientHello消息后,会向客户端发送一个ServerHello消息作为回应。该消息包含服务器选择的TLS版本、加密算法以及其他握手参数。 3. 服务器发送证书:服务器在发送ServerHello消息后,会将自己的数字证书发送给客户端。该证书包含服务器的公钥和相关信息,用于客户端验证服务器的身份。 4. 客户端验证证书:客户端接收到服务器发送的证书后,会对证书进行验证。这个过程包括检查证书的有效性、检查证书链是否可信以及验证服务器的身份等。 5. 客户端生成密钥:如果服务器的证书验证成功,客户端会生成一个用于加密通信的随机数,称为"Pre-master secret",并使用服务器的公钥进行加密后发送给服务器。 6. 服务器解密密钥:服务器接收到客户端发送的加密的"Pre-master secret"后,使用自己的私钥进行解密,得到相同的"Pre-master secret"。 7. 双方生成会话密钥:客户端和服务器使用客户端随机数、服务器随机数以及"Pre-master secret"生成一个会话密钥,用于后续的加密和解密通信数据。 8. 完成握手:双方在生成会话密钥后,会相互通知对方握手过程已完成。这个通知是加密的,用来确保握手过程的安全性。 9. 安全通信:握手完成后,双方使用会话密钥对通信数据进行加密和解密,确保数据的保密性和完整性。 以上是TLS建立TCP连接的过程,通过这个过程,客户端和服务器可以建立一个安全的通信通道,保护数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值