MST

星途 面试题库

面试题:网络编程中SSL/TLS协议握手过程简述

请详细描述SSL/TLS协议在网络编程中的握手过程,包括各个阶段的信息交互和作用。
39.7万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

1. 客户端发起握手

  • 信息交互:客户端向服务器发送ClientHello消息。此消息包含客户端支持的SSL/TLS版本、加密套件列表(如对称加密算法、非对称加密算法、哈希算法等组合)、随机数(Client Random)以及会话ID(若为恢复会话)等信息。
  • 作用:告知服务器客户端希望建立SSL/TLS连接,并提供相关连接参数,随机数用于后续生成密钥,会话ID用于会话恢复以减少握手开销。

2. 服务器响应

  • 信息交互:服务器回复ServerHello消息,其中包含服务器选择的SSL/TLS版本、选定的加密套件、另一个随机数(Server Random)以及服务器证书(包含公钥等信息)。若服务器需要客户端认证,还会发送CertificateRequest消息。最后发送ServerHelloDone消息表示服务器Hello阶段结束。
  • 作用:服务器确认客户端提议并选定连接参数,随机数用于密钥生成,证书用于客户端验证服务器身份,CertificateRequest用于要求客户端提供证书进行双向认证。

3. 客户端验证与密钥交换

  • 信息交互:客户端验证服务器证书的有效性(如证书是否由可信CA签发、是否过期等)。若服务器请求客户端认证,客户端会发送Certificate消息(包含客户端证书)。然后客户端生成一个预主密钥(Pre - Master Secret),用服务器证书中的公钥加密后通过ClientKeyExchange消息发送给服务器。同时客户端发送ChangeCipherSpec消息,通知服务器后续消息将使用加密传输,并紧接着发送Finished消息,此消息是对之前所有握手消息的摘要加密,用于验证握手过程的完整性。
  • 作用:验证服务器身份确保通信安全,预主密钥结合之前的两个随机数生成最终的会话密钥。ChangeCipherSpec开启加密通信,Finished消息验证握手过程正确无误。

4. 服务器密钥交换与响应

  • 信息交互:若服务器请求了客户端证书,服务器会验证客户端证书。服务器使用私钥解密得到预主密钥,结合两个随机数生成会话密钥。然后服务器发送ChangeCipherSpec消息通知客户端后续使用加密传输,再发送Finished消息,同样是对之前所有握手消息的摘要加密,用于验证完整性。
  • 作用:验证客户端身份(若双向认证),生成会话密钥,开启加密通信并验证握手完整性。至此,SSL/TLS握手完成,双方后续通信使用会话密钥加密。