这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
上次我们使用TCP连接保证了数据传输的顺畅,我们还需要使用TLS/1.2协议来确保我们传输的数据不会被其他人篡改。TLS/1.2的认证过程如下:
- 客户端向服务器发送ClientHello消息。ClientHello消息包含了TLS版本号、随机数、密码套件和压缩方法等信息。
- 服务器收到ClientHello消息后,回复ServerHello消息。ServerHello消息包含了TLS版本号、随机数、密码套件和压缩方法等信息。
- 服务器发送Certificate消息,该消息包含了服务器证书、证书链和可选的证书状态信息。
- 服务器发送ServerKeyExchange消息,如果需要的话。该消息包含了服务器生成的密钥协商参数。
- 服务器发送CertificateRequest消息,如果需要的话。该消息包含了服务器需要的客户端证书类型和Distinguished Name(DN)列表。
- 服务器发送ServerHelloDone消息,告诉客户端握手过程已经完成。
- 客户端验证服务器证书,如果验证不通过则停止握手过程。客户端发送ClientKeyExchange消息,该消息包含了用于密钥协商的随机数和密码套件。
- 客户端发送CertificateVerify消息,如果需要的话。该消息包含了客户端对证书的数字签名,用于验证客户端拥有私钥。
- 客户端发送ChangeCipherSpec消息,告诉服务器下一条消息将使用新协商的密钥进行加密。
- 客户端发送Finished消息,该消息使用新协商的密钥进行加密。该消息的内容是握手过程中所有消息的哈希值,用于验证握手过程的完整性和正确性。
- 服务器验证客户端证书,如果验证不通过则停止握手过程。服务器发送ChangeCipherSpec消息,告诉客户端下一条消息将使用新协商的密钥进行加密。
- 服务器发送Finished消息,该消息使用新协商的密钥进行加密。该消息的内容是握手过程中所有消息的哈希值,用于验证握手过程的完整性和正确性。
至此,TLS/1.2握手过程完成,客户端和服务器之间建立了安全连接。在这个过程中,密码套件的选择非常重要,因为它决定了加密算法、密钥长度和MAC算法等,直接影响连接的安全性。同时,证书的验证也是非常关键的一步,它保证了通信双方的身份和信任,避免了中间人攻击和数据篡改。