SSL/TLS握手

文章目录

安全通信协议是一类用于保护计算机网络上数据传输安全的协议。这些协议通过加密、身份验证和数据完整性机制来防止数据被窃听、篡改或伪造。以下是一些主要的安全通信协议:SSL/TLS, IPsec, SSH, HTTPS, PGP/GPG, DTLS, S/MIME
以下我们着重介绍SSL/TLS和HTTPS

SSL/TLS

SSL:Secure Socket Layer(安全套接层) 是用于两个通信应用程序之间提供安全连接的协议,目前SSL证书均已停用

TLS:Transport Layer Security (传输层安全协议),是SSL的升级版本,用于修复SSL安全漏洞,虽然TLS被广泛使用,但依然沿用SSL称呼

TLS历史发展

SSL1.0(1995年) 存在严重漏洞,未被公开发布

SSL2.0(1995) 首次公开发布版本,存在漏洞,如不完全的握手和容易遭受攻击

SSL3.0(1996) 易受POODLE攻击,已被认为不安全协议

TLS1.0(1999) 受BEAST攻击,逐渐被弃用

TLS1.1(2006) 增强了CBC模式保护,防止了某些攻击, 但目前逐渐被更新版本取代

TLS1.2(2008) 引入了更多加密算法支持,改进了密钥导出和签名计算方式,更加灵活安全,目前依然广泛使用,被认为是安全的

TLS1.3(2018) 大幅简化了握手过程,减少了延迟,引入了前向保密性(Forward Secrecy)作为默认特性,是目前的最新版本,广泛推行和应用

层次结构

SSL/TLS协议由多个子协议构成,每个子协议负责不同的功能

  • 握手协议(Handshake Protocol)
    • 负责建立和管理安全连接,包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
  • 记录协议(Record Protocol)
    • 负责数据分片、压缩、加密和传输,确保数据的机密性和完整性。
  • 警报协议(Alert Protocol)
    • 对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型的错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告。
  • 变化密码规范协议(Change Cipher Spec Protocol)
    • 用于通知对方使用新的加密算法和密钥,一条消息表明握手协议已经完成。

SSL/TLS握手协议

SSL/TLS协议能够提供的安全目标主要包括如下几个:

  • 认证性------借助数字证书认证服务器端和客户端身份,防止身份伪造
  • 机密性------借助加密防止第三方窃听
  • 完整性------借助消息认证码(MAC)保障数据完整性,防止消息篡改
  • 重放保护------通过使用隐式序列号防止重放攻击

为了实现这些安全目标,SSL/TLS协议被设计为一个两阶段协议,分为握手阶段和应用阶段
| 🐖 TLS1.2的握手协议十分繁琐,TLS1.3的握手协议进行了改进,以下将分别说明以示两者不同

  1. 客户端 Hello(ClientHello)[人话版:Client:我能理解的cipher suit有RSA/3DES等,我们使用什么cipher suit进行通信]
    • 客户端发送 ClientHello 消息,其中包含:
      • 支持的协议版本(如 TLS 1.2)
      • 支持的加密套件列表
      • 支持的压缩方法
      • 随机数
      • 其他扩展(如服务器名称指示 SNI)
  2. 服务器 Hello(ServerHello)[人话版:Server: 我们就用RSA/3DES进行通信吧]
    • 服务器响应 ServerHello 消息,其中包含:
      • 协议版本(如 TLS 1.2)
      • 选择的加密套件
      • 选择的压缩方法
      • 随机数
      • 其他扩展
  3. 服务器证书(Server Certificate)[人话版:Server: 这是我的身份证明,你看看]
    • 服务器发送其数字证书,包含公钥,客户端用来验证服务器的身份。
  4. 服务器密钥交换(Server Key Exchange 可选)[人话版:Server: 如果证书信息不足的话,我们使用这些信息来进行密钥交换吧]
    • 如果使用临时密钥交换算法(如 ECDHE 或 DHE),服务器发送密钥交换消息。
  5. 服务器证书请求(Server Certificate Request, 可选)[人话版:Server: 对了,也给我下你的身份证明吧]
    • 如果需要客户端身份验证,服务器请求客户端证书。
  6. 服务器握手结束(Server Hello Done)[人话版:Server: 问候到此结束]
    • 服务器发送 ServerHelloDone 消息,表示握手消息结束。
  7. 客户端证书(Client Certificate, 可选)[人话版:client: 给你我的证书]
    • 如果服务器请求,客户端发送其数字证书。
  8. 客户端密钥交换(Client Key Exchange)[人话版:client: 这是经过你的公钥加密后的预备主密码]
    • 客户端生成预主密钥,用服务器的公钥加密后发送给服务器, 预主密钥用于生成最终的会话密钥。
    • 服务端收到预主密钥后,会使用其私钥解密,客户端和服务器使用预主密钥和随机数生成主密钥,再派生出会话密钥。
  9. 证书验证(Certificate Verify, 可选)[人话版:client: 我就是持有客户端证书本人]
    • 如果客户端发送了证书,客户端发送此消息以证明其身份。
  10. 客户端更改密码规范(Client ChangeCipherSpec)[人话版:Client: 好的,我现在切换为我们协商好的密码进行后续通信]
    • 客户端发送 ChangeCipherSpec 消息,表示后续通信将使用协商好的加密算法和会话密钥。
  11. 客户端完成(Client Finished)[人话版:client: 握手协议到此结束]
    • 客户端发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。
  12. 服务器更改密码规范(Server ChangeCipherSpec)[人话版:server: 好的,我也要切换密码了]
    • 服务器发送 ChangeCipherSpec 消息,表示后续通信将使用协商好的加密算法和会话密钥。
  13. 服务器完成(Server Finished)[人话版:server: 好的,握手协议到此结束]
    • 服务器发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。

TLS1.3对握手过程进行了简化,减少了消息数量,整个握手过程如下

  1. 客户端 Hello(ClientHello)
    • 客户端发送 ClientHello 消息,其中包含:
      • 支持的协议版本(如 TLS 1.3)
      • 支持的加密套件列表
      • 支持的密钥共享方法(如 ECDHE)
      • 支持的签名算法
      • 支持的哈希算法
      • 随机数
      • 其他扩展(如服务器名称指示 SNI)
  2. 服务器 Hello(ServerHello)
    • 服务器响应 ServerHello 消息,其中包含:
      • 协议版本(如 TLS 1.3)
      • 选择的加密套件
      • 选择的密钥共享方法
      • 随机数
      • 其他扩展
  3. 服务器证书(Server Certificate)
    • 服务器发送其数字证书,包含公钥,客户端用来验证服务器的身份。
  4. 服务器证书验证(Certificate Verify)
    • 服务器发送证书验证消息,使用服务器的私钥对握手消息签名,证明其身份。
  5. 服务器握手完成(Server Finished)
    • 服务器发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。
  6. 客户端证书(Client Certificate, 可选)
    • 如果服务器请求,客户端发送其数字证书。
  7. 客户端证书验证(Certificate Verify)
    • 客户端发送证书验证消息,使用客户端的私钥对握手消息签名,证明其身份。
  8. 客户端握手完成(Client Finished)
    • 客户端发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。

TLS1.2 Vs TLS1.3

由上述握手过程可以看出,TLS1.3的握手过程比TLS1.2的握手过程简洁了不少,握手过程是两者的关键区别

  • Difference 1:往返时间(RTT)

    往返时间 (RTT) 是指信号从发送端到接收端再返回所需的时间。 在 TLS 等协议中,RTT 至关重要,因为它直接影响用户浏览器和网站服务器建立安全连接的速度。

    在 TLS 1.2 中,当浏览器连接到安全网站时,握手过程需要在客户端(浏览器)和服务器之间往返两次,然后才能开始安全地交换数据。

    TLS 1.2 中的两步握手会带来延迟,尤其是在客户端和服务器之间距离较远的情况下,延迟会更明显

    TLS 1.3号称 0-RTT, 通过合并客户端和服务端的 "Hello"信息,将客户端与服务端之间的往返次数从两次减少到了一次。

  • Difference 2:密码套件(Cipher suit)

    TLS 1.2 支持多种密码套件,提供各种加密、身份验证和散列算法组合。 但是,选择的丰富性增加了选择安全性较低的密码套件的风险,可能会使通信暴露于漏洞之中

    TLS 1.3 将支持的密码套件缩减到五个,全部基于关联数据验证加密(AEAD)原理。 这种简化旨在提高安全性和效率。

    LS 1.3 中受限但安全的密码套件选项降低了协商的复杂性,减少了无意中使用弱加密算法的可能性。

  • Difference 3:完美的前向保密(PFS)

    完美前向保密(PFS)是一种加密功能,旨在防止在长期密钥泄露的情况下暴露过去的通信。

    TLS 1.3 默认启用完美前向保密(PFS)。 这意味着,即使有人设法窃取了您安全通信所用的密钥,他们也无法解密过去的信息。 这就像定期更换门锁一样。

    目前,在 TLS 1.2 中,使用这种额外的安全功能是可选的。 因此,如果您没有特别选择,如果有人掌握了您的秘钥,他们就有可能解密并读取您以前的信息。

    从本质上讲,TLS 1.3 可确保您过去的数据传输无论如何都不会被锁定,与 TLS 1.2 相比提供了更高的安全级别。

  • Difference 4:密钥交换机制

    TLS 1.2 使用多种密钥交换方法,包括RSA(Rivest-Shamir-Adleman)和 Diffie-Hellman 方法。 RSA 包括服务器向客户端发送加密的预主密文,而 Diffie-Hellman 允许客户端和服务器通过开放信道建立共享密文。 不过,TLS 1.2 通常默认使用 RSA 进行密钥交换。

    现在,在 TLS 1.3 中,默认密钥交换机制发生了明显的变化。 该协议要求使用 Diffie-Hellman 密钥交换,特别是椭圆曲线变体 (ECDHE)。 这种方法可确保更高效、更安全地协商加密密钥。

相关推荐
Koi慢热1 小时前
路由基础(全)
linux·网络·网络协议·安全
hzyyyyyyyu3 小时前
内网安全隧道搭建-ngrok-frp-nps-sapp
服务器·网络·安全
刽子手发艺3 小时前
WebSocket详解、WebSocket入门案例
网络·websocket·网络协议
速盾cdn7 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211237 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin7 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
PersistJiao9 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
黑客Ash11 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy11 小时前
计算机网络(第一章)
网络·计算机网络·php