面试题答案
一键面试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握手完成,双方后续通信使用会话密钥加密。