HTTPS(二) -- SSL/TLS 工作原理和详细握手过程

上一篇 HTTPS 基础知识中讲解了对称加密,非对称加密,非对称加密改良方案,非对称加密 + 对称加密,中间人攻击,数字证书,数字签名,HTTPS 工作原理,我们知道 HTTPS 其实就是在 HTTP 层和 TCP 之间加了一个 SSL/TLS 层:
在这里插入图片描述
这里我们再来说说 SSL 握手的过程

类似与 TCP 的 3 次握手建立 TCP 连接,SSL 握手是用于建立 SSL(Security Socket Layer)层的连接。SSL 握手的场景很多,比如最常见的 HTTPS,访问 https://www.baidu.com 时,在进行 HTTPS 的应用数据传递之前,需要建立 SSL 的连接

1 SSL 握手有三个目的:

  • 客户端与服务器选择相同的数据保护算法;
  • 确定加密密钥;
  • 握手还可以选择对客户端进行认证。

2 TLS 握手详细过程

下图展示了 SSL/TSL 握手的详细过程
在这里插入图片描述

SSL / TLS 握手详细过程

  1. "client hello" 消息:客户端通过发送 “client hello” 消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本,支持的算法列表和密码组合以供服务器进行选择,还有一个 “client random” 随机字符串。

  2. "server hello" 消息:服务器发送 “server hello” 消息对客户端进行回应,该消息包含了服务器选择的加密算法,服务器选择的密码组合,数字证书和 “server random” 随机字符串。

  3. 验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:

    • 检查数字签名
    • 验证证书链
    • 检查证书的有效期
    • 检查证书的撤回状态 (撤回代表证书已失效)
  4. "premaster secret"字符串:客户端向服务器发送另一个随机字符串 “premaster secret (预主密钥)”,这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。

  5. 使用私钥:服务器使用私钥解密 “premaster secret”。

  6. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY。

  7. 客户端就绪:客户端发送经过共享密钥 KEY 加密过的 “finished” 信号,为了防止握手过程遭到篡改,该消息的内容是前一阶段所有握手消息的MAC值。

  8. 服务器就绪:服务器发送经过共享密钥 KEY 加密过的 “finished” 信号,该消息的内容是前一阶段所有握手消息的 MAC 值。

  9. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

第 8 与第 9 步用以防止握手本身遭受篡改。设想一个攻击者想要控制客户端与服务器所使用的算法。客户端提供多种算法的情况相当常见,某些强度弱而某些强度强,以便能够与仅支持弱强度算法的服务器进行通信。攻击者可以删除客户端在第 1 步所提供的所有高强度算法,于是就迫使服务器选择一种弱强度的算法。第 8 步与第 9 步的 MAC 交换就能阻止这种攻击,因为客户端的 MAC 是根据原始消息计算得出的,而服务器的 MAC 是根据攻击者修改过的消息计算得出的,这样经过检查就会发现不匹配。

证书链 (certificate chain):也称为证书路径,是用于认证实体合法身份的证书列表,具体到 HTTPS 通信中,就是为了验证服务器的合法身份。之所以使用证书链,是为了保证根证书 (root CA certificate) 的安全,中间层可以看做根证书的代理,起到了缓冲的作用,如下图所示:
在这里插入图片描述

证书链从根证书开始,并且证书链中的每一级证书所标识的实体都要为其下一级证书签名,而根证书自身则由证书颁发机构签名。客户端在验证证书链时,必须对链中所有证书的数字签名进行验证,直到达到根证书为止。

参考:https://segmentfault.com/a/1190000021559557

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/113447803