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