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