TLS 握手协议
传输层安全(TLS)握手协议负责建立或恢复安全会话所需的身份验证和密钥交换。 在建立安全 会话时,握手协议将管理以下内容:
- 密码套件协商
- 服务器身份验证和客户端(可选)身份验证
- 会话密钥信息交换。
密码套件协商
客户端和服务器进行联系,并选择将在整个消息交换中使用的密码套件。
认证
在 TLS 中,服务器向客户端证明其标识。 客户端可能还需要向服务器证明其标识。 PKI 使用 公钥/私钥对是此身份验证的基础。 用于身份验证的确切方法由协商的密码套件确定。
密钥交换
客户端和服务器交换随机数和一个名为 Pre-Master Secret 的特殊号码。 这些数字与允许客户端和服务器创建其共享机密的其他数据相结合,称为“主机密”。 主机密由客户端和服务器用来生成写入 MAC 机密,这是用于 哈希的会话密钥,以及写入密钥,这是用于加密 会话密钥。
使用 TLS 建立安全会话
TLS 握手协议涉及以下步骤:
- 客户端将“Client hello”消息发送到服务器,以及客户端的随机值和支持的密码套件。
- 服务器通过向客户端发送“服务器 hello”消息以及服务器的随机值来响应。
- 服务器将其证书发送到客户端进行身份验证,并可能从客户端请求证书。 服务器发送“服务器 hello done”消息。
- 如果服务器已从客户端请求证书,客户端会发送该证书。
- 客户端创建一个随机的预主密钥,并使用服务器证书公钥对其进行加密,并将加密的预主密钥发送到服务器。
- 服务器接收预主密钥。 服务器和客户端分别根据预主密钥生成主密钥和 会话密钥。
- 客户端将“更改密码规范”通知发送到服务器,以指示客户端将开始使用新的 会话密钥哈希 和加密消息。 客户端还会发送“客户端已完成”消息。
- 服务器接收“更改密码规范”,并使用 会话密钥将其记录层安全状态切换到 对称加密。 服务器将“服务器已完成”消息发送到客户端。
- 客户端和服务器现在可以通过已建立的安全通道交换应用程序数据。 从客户端到服务器以及从服务器发送到客户端的所有消息都使用会话密钥进行加密。
使用 TLS 恢复安全会话
客户端使用要恢复的会话的会话 ID 发送“Client hello”消息。
服务器检查其会话缓存中是否有匹配的会话 ID。 如果找到匹配项,并且服务器能够恢复会话,则会发送包含会话 ID 的“服务器 hello”消息。
注意
如果未找到会话 ID 匹配项,服务器将生成新的会话 ID,TLS 客户端和服务器执行完全握手。
客户端和服务器必须交换“更改密码规范”消息,并发送“客户端已完成”和“服务器已完成”消息。
客户端和服务器现在可以通过安全通道恢复应用程序数据交换。