SSL握手

还得从HTTP和HTTPS的区别说起。HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手所以慢一点。
问题来了,SSL是怎么握手的?
一图胜千言:
SSL握手_第1张图片

  • ClientHello 阶段
    这一步中,客户端向浏览器发出加密通信请求。并向服务器提供:
  • 支持的协议版本,比如TLS 1.0版。
  • 一个客户端生成的随机数session ticket1,稍后用于生成"对话密钥"。
  • 支持的加密方法,比如RSA公钥加密。
  • 支持的压缩方法。
  • ServerHello 阶段
    服务器回应:
  • 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
  • 一个服务器生成的随机数session ticket2,稍后用于生成"对话密钥"。
  • 确认使用的加密方法,比如RSA公钥加密。
  • 服务器证书。
  • CipherSpec 阶段
    客户端收到服务器返回的证书后, 会验证证书有效性. 验证步骤大概如下:
  • 验证证书有效期(起止时间)
  • 验证证书域名(与浏览器地址栏中域名是否匹配)
  • 验证证书吊销状态(CRL+OCSP)
  • 验证证书颁发机构, 如果颁发机构是中间证书, 在验证中间证书的有效期/颁发机构/吊销状态. 一直验证到最后一层证书, 如果最后一层证书是在操作系统或浏览器内置, 那么就是可信的, 否则就是自签名.

以上验证步骤, 需要全部通过,否则就会显示警告。

如果上述验证没有问题,客户端会取出CA中的公钥,然后向服务器发送随机的预主密钥(pre-master key)(session ticket3),对于RSA密钥交换算法来说三个随机的session ticket通过一个密钥导出器可以得到一个对称密钥 session key。

  • 内容传输阶段
    非对称加密非常消耗 CPU,所以只有在协商秘钥时候使用非对称加密, 而应用层数据交换就用协商成功的秘钥作为私钥对称加密传输(服务器响应的加密返回, 客户端提交的也加密提交).

你可能感兴趣的:(https,ssl)