面试题答案
一键面试- 客户端发起握手:
- 操作:客户端向服务器发送ClientHello消息,该消息包含客户端支持的TLS版本、加密套件列表(如AES - GCM - SHA256等)、随机数(Client Random)、压缩方法等信息。此步骤是握手的起始,客户端告知服务器自己的能力和初始随机值。
- 服务器回应:
- 操作:服务器收到ClientHello后,回复ServerHello消息。消息中包含服务器选择的TLS版本、选定的加密套件、服务器产生的随机数(Server Random)。接着服务器发送Certificate消息,将自己的数字证书(包含公钥等信息)发送给客户端,用于身份验证。如果服务器需要客户端进行身份验证,还会发送CertificateRequest消息。最后发送ServerHelloDone消息,表明服务器的Hello阶段结束。
- 客户端验证与密钥交换:
- 操作:客户端验证服务器的数字证书,检查证书的有效性(如是否过期、证书链是否完整等)。验证通过后,客户端生成一个预主密钥(Pre - Master Secret),用服务器证书中的公钥加密,通过ClientKeyExchange消息发送给服务器。同时客户端根据Client Random、Server Random和Pre - Master Secret计算出会话密钥(Master Secret),再通过此Master Secret生成用于后续通信的对称加密密钥(如用于加密数据的会话密钥、用于消息认证的MAC密钥等)。然后客户端发送ChangeCipherSpec消息,通知服务器后续通信将使用协商好的加密套件和密钥进行加密。最后发送Finished消息,该消息是对之前所有握手消息的摘要,使用新生成的密钥加密,用于让服务器验证客户端计算的密钥是否正确。
- 服务器完成握手:
- 操作:服务器使用自己的私钥解密ClientKeyExchange消息,获取Pre - Master Secret,同样根据Client Random、Server Random和Pre - Master Secret计算出会话密钥(Master Secret),进而生成对称加密密钥。服务器发送ChangeCipherSpec消息,表明后续将使用新的加密套件和密钥。最后发送Finished消息,也是对之前所有握手消息的摘要,用新密钥加密,让客户端验证服务器计算的密钥是否正确。至此,TLS握手完成,双方可以使用协商好的密钥进行安全的在线支付通信。