面试题答案
一键面试- 客户端发起请求:
- 客户端向服务器发送一个
ClientHello
消息。 - 作用:这个消息包含客户端支持的SSL/TLS版本、加密套件列表(如加密算法、哈希算法等)、随机数(
ClientRandom
)等信息。服务器根据这些信息来选择合适的加密套件和版本进行后续通信,随机数用于后续生成主密钥等。
- 客户端向服务器发送一个
- 服务器响应:
- 服务器返回
ServerHello
消息。 - 作用:其中包含服务器选择的SSL/TLS版本、加密套件、另一个随机数(
ServerRandom
)。这表明服务器对客户端请求的回应,确定了双方使用的加密版本和套件,第二个随机数也用于生成主密钥。 - 接着服务器发送
Certificate
消息。 - 作用:此消息包含服务器的数字证书,证书中有服务器的公钥等信息。客户端可以通过验证证书的合法性来确认服务器身份,确保证书是由受信任的证书颁发机构(CA)签发,且未被篡改。
- 然后服务器发送
ServerHelloDone
消息。 - 作用:表示服务器的Hello阶段结束,等待客户端进一步回应。
- 服务器返回
- 客户端验证与密钥交换:
- 客户端验证服务器证书的合法性。如果证书合法,客户端生成一个预主密钥(
Pre - Master Secret
),并用服务器证书中的公钥加密,通过ClientKeyExchange
消息发送给服务器。 - 作用:预主密钥是生成主密钥的重要材料,加密传输保证其安全性,只有服务器能用私钥解密获取。
- 客户端使用之前的
ClientRandom
、ServerRandom
和Pre - Master Secret
,通过一定算法计算出主密钥(Master Secret
)。同时客户端发送ChangeCipherSpec
消息。 - 作用:
ChangeCipherSpec
通知服务器后续通信将使用协商好的加密套件和密钥进行加密。客户端还会发送一个Finished
消息,这个消息是对之前所有握手消息的一个摘要,使用新的密钥和加密算法进行保护。
- 客户端验证服务器证书的合法性。如果证书合法,客户端生成一个预主密钥(
- 服务器响应与完成连接:
- 服务器用私钥解密
ClientKeyExchange
消息获取Pre - Master Secret
,同样使用ClientRandom
、ServerRandom
和Pre - Master Secret
计算出主密钥。服务器发送ChangeCipherSpec
消息。 - 作用:通知客户端后续通信将使用新的加密套件和密钥。服务器也发送一个
Finished
消息,也是对之前所有握手消息的摘要,使用新密钥和加密算法保护。 - 至此,客户端和服务器之间建立了安全的HTTPS连接,后续数据传输都将使用协商好的加密套件和密钥进行加密保护。
- 服务器用私钥解密