每日一道大厂题-HTTPS握手

来自Daily-Interview-Question

Q:介绍 HTTPS 握手过程

  1. Client Hello
  2. Server Hello
  3. Certificate
  4. Server Hello Done
  5. Client Key Exchange
  6. Change Cipher Spec
  7. Finished
  8. Change Cipher Spec
  9. Finished

步骤一:客户端发送请求(Client Hello)

首先,客户端向服务端提供加密信息的通信。

  1. 客户端支持的SSL的指定版本
  2. 客户端产生的随机数(Client Random, 稍后用于生成”对话密钥”
  3. 客户端支持的加密算法

步骤二:服务器回应(Sever Hello)

服务端收到请求,向客户端发出回应

  1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
  2. 一个服务器生成的随机数(Server Random),稍后用于生成”对话密钥”。
  3. 确认使用的加密方法,比如RSA公钥加密。
  4. 服务器证书

第一次握手结束

步骤三:发送验证消息

SSL服务器将数字证书通过Certificate消息发送给SSL客户端,证书里面包含了网站地址,加密公钥,以及证书的颁发机构。

步骤四:服务器回应结束

SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。

步骤五:

SSL客户端验证SSL服务器的证书合法后,如果不合法浏览器会提示。如果合法的话,利用证书中的公钥,SSL客户端随机生成的premaster secret(后续加密数据所需要的对称密钥),并通过Client Key Exchange消息发送给SSL服务器。

第二次握手结束

步骤六:

SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。

步骤七:

SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

步骤八:

同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。

步骤九:

SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

第三次握手结束