跳到主要内容

4. Handshake Protocol (握手协议)

Handshake Protocol 用于协商连接的安全参数. 握手消息会交给 TLS record layer, 在那里被封装进一个或多个 TLSPlaintext 或 TLSCiphertext 结构中, 并按照当前活动连接状态进行处理和传输.

本页提供第 4 节的结构化本地化概览. 完整消息结构, 扩展定义和协议细节应以 RFC 8446 正文为准.

4.1. Key Exchange Messages (密钥交换消息)

Key exchange message 用于确定 client 和 server 的安全能力, 并建立共享秘密材料, 包括用于保护后续握手和应用数据的 traffic key.

4.1.1. Cryptographic Negotiation (密码协商)

在 TLS 中, 密码协商由 client 在 ClientHello 中提供四组选项开始:

  • cipher suite 列表
  • "supported_groups" extension 和 "key_share" extension
  • "signature_algorithms" extension
  • "pre_shared_key" extension 和 "psk_key_exchange_modes" extension

4.1.2. ClientHello

ClientHello 是 client 连接 server 时发送的第一条 TLS 消息. 它包含 protocol version, random value, session ID, cipher suite, compression method 和 extension.

4.1.3. ServerHello

当 server 能找到一组可接受参数时, 会发送 ServerHello 响应 ClientHello. 该消息包含 protocol version, random value, session ID echo, 所选 cipher suite, compression method 和 extension.

4.1.4. HelloRetryRequest

当需要纠正 DHE share 不匹配时, server 发送 HelloRetryRequest.

4.2. Extensions (扩展)

许多 TLS 消息包含以 tag-length-value 编码的 extension. 本节定义 TLS extension 的格式和用法. RFC 8446 中定义的 extension 包括:

  • supported_versions
  • cookie
  • signature_algorithms
  • certificate_authorities
  • oid_filters
  • post_handshake_auth
  • supported_groups
  • key_share
  • psk_key_exchange_modes
  • early_data
  • pre_shared_key

4.3. Server Parameters (服务器参数)

这些消息建立不属于密钥交换本身的握手参数:

  • EncryptedExtensions
  • CertificateRequest

4.4. Authentication Messages (认证消息)

TLS 使用一组通用消息通过非对称密码学完成认证:

  • Certificate
  • CertificateVerify
  • Finished

4.5. End of Early Data

如果 server 接受 early data, client 会在收到 server Finished 之后发送 EndOfEarlyData 消息.

4.6. Post-Handshake Messages (握手后消息)

TLS 允许在主握手之后发送某些消息:

  • NewSessionTicket
  • Post-Handshake Authentication
  • KeyUpdate