MST

星途 面试题库

面试题:安全认证之SSL证书工作原理基础

请详细阐述SSL证书在握手过程中,客户端和服务器端分别执行了哪些主要步骤以建立安全连接?
27.3万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

客户端主要步骤

  1. 发送ClientHello消息
    • 客户端向服务器发送ClientHello消息,该消息包含客户端支持的SSL/TLS版本号、加密套件列表、压缩方法列表、随机数(ClientRandom)等信息。此随机数后续会用于生成会话密钥。
  2. 接收服务器响应
    • 等待服务器返回ServerHello、Certificate、ServerKeyExchange(如果需要)和ServerHelloDone消息。
    • ServerHello消息:服务器从客户端提供的版本和加密套件等列表中选择合适的选项,并告知客户端。其中也包含服务器生成的随机数(ServerRandom)。
    • Certificate消息:服务器向客户端发送其数字证书,该证书包含服务器的公钥等信息,用于客户端验证服务器身份。
    • ServerKeyExchange消息:在某些情况下(如使用Diffie - Hellman密钥交换等非RSA密钥交换方式),服务器需要发送此消息来提供额外的密钥交换参数。
    • ServerHelloDone消息:表示服务器的Hello阶段结束。
  3. 验证服务器证书
    • 客户端使用其信任的根证书对服务器发送的证书进行验证。验证内容包括证书是否由受信任的证书颁发机构(CA)签名、证书是否过期、证书中的域名是否与所访问的服务器域名匹配等。如果验证失败,客户端会终止连接。
  4. 生成预主密钥
    • 客户端生成一个48字节的预主密钥(Pre - Master Secret)。
  5. 加密预主密钥
    • 使用从服务器证书中获取的服务器公钥对预主密钥进行加密。
  6. 发送加密的预主密钥
    • 通过ClientKeyExchange消息将加密后的预主密钥发送给服务器。
  7. 计算会话密钥
    • 客户端根据ClientRandom、ServerRandom和Pre - Master Secret,使用约定的密钥导出函数计算出会话密钥(如用于对称加密的密钥、用于消息认证码的密钥等)。
  8. 发送ChangeCipherSpec消息
    • 客户端向服务器发送ChangeCipherSpec消息,通知服务器后续通信将使用新协商的加密套件和会话密钥。
  9. 发送Finished消息
    • 客户端使用新的会话密钥对一系列握手消息的摘要进行加密,并通过Finished消息发送给服务器,用于验证密钥交换和认证过程是否成功。

服务器端主要步骤

  1. 接收ClientHello消息
    • 服务器接收客户端发送的ClientHello消息,获取客户端支持的SSL/TLS版本号、加密套件列表、压缩方法列表、ClientRandom等信息。
  2. 发送ServerHello等消息
    • ServerHello消息:从客户端提供的选项中选择合适的SSL/TLS版本、加密套件等,并将选择结果及ServerRandom发送给客户端。
    • Certificate消息:向客户端发送服务器的数字证书,以便客户端验证服务器身份。
    • ServerKeyExchange消息(如果需要):对于一些非RSA密钥交换方式,服务器需要在此消息中提供额外的密钥交换参数。
    • ServerHelloDone消息:告知客户端服务器的Hello阶段完成。
  3. 接收加密的预主密钥
    • 服务器接收客户端通过ClientKeyExchange消息发送的加密后的预主密钥。
  4. 解密预主密钥
    • 使用服务器的私钥对加密的预主密钥进行解密,得到Pre - Master Secret。
  5. 计算会话密钥
    • 服务器与客户端一样,根据ClientRandom、ServerRandom和Pre - Master Secret,使用相同的密钥导出函数计算出会话密钥。
  6. 发送ChangeCipherSpec消息
    • 服务器向客户端发送ChangeCipherSpec消息,表明后续通信将使用新协商的加密套件和会话密钥。
  7. 发送Finished消息
    • 服务器使用新的会话密钥对一系列握手消息的摘要进行加密,并通过Finished消息发送给客户端,用于验证密钥交换和认证过程是否成功。此后,客户端和服务器就可以使用新的会话密钥进行安全通信。