TLS握手流程

概述
TLS 全称为 Transport Layer Security(传输层安全),其前身是 SSL,全称为 Secure Sockets Layer(安全套接字层),它的作用是为上层的应用协议提供安全的通信,比如众所周知的 HTTP + TLS = HTTPS。

SSL 2.0 是该协议的第一个公开发布的版本,由于其存在的安全问题很快被升级到了 SSL 3.0,并且在 1999 年,IETF 小组将该协议标准化,因此 TLS 1.0 诞生了。

本文将介绍 TLS 1.0 到 TLS 1.3 的握手流程,你只需要一点点的 SSL\TLS 或 HTTPS 的前置知识与了解过简单的密码学上的概念,如对称加密、非对称加密、哈希算法等名词。

  1. Client 向 Server 请求建立连接。
  2. Server 将自己的证书发送给 Client。
  3. Client 验证证书,然后使用证书中的公钥加密接下来要用来通信的密钥,将加密结果发送给 Server。
  4. Server 收到后进行响应,且将用该密钥来对需要发送或接收的上层数据进行加解密。
  5. 自此 TLS 握手完成,接下来开始使用密钥进行通信。
    以下为简单的流程图:
    在这里插入图片描述
    我们使用的是 RSA 算法来进行密钥的交换。

RSA 应该是最多人了解的非对称加密算法,其在这里用于密钥协商(交换)和证书验证,这分别用到了它的两个特性:

公钥加密,对应私钥才能解密
私钥加密,对应公钥可以解密
证书机制用到了第二个机制。

证书实际上就是一段符合指定标准的文本,其大致上记录了:

证书所属的域名
域名所有者的公钥
有效日期
使用的加密算法
CA(证书颁发者)会对这些内容进行使用哈希函数导出一个值(简单来讲就是用 md5 类似的算法计算一下),该值将被 CA 的私钥进行加密(这样的操作也叫做"签名"),同时签名也将被记录到证书上。
而"证书验证"这个行为,当然指的就是使用证书颁发者公布的公钥,来对被加密的值进行解密,然后对证书使用同样的哈希函数进行计算,并使用计算出的值与解密出的值进行对比,如果相等则说明没有被篡改过,可以放心的使用证书上的公钥进行通信。

而在上文的握手过程中,由于通信密钥在发送给 Server 时被公钥所加密了,而用来解密的私钥自始自终都只被证书申请者持有,所以即使有人截取了所有通信的信息,都不能得到通信的密钥(当然这是在假定密钥永远不会泄露的情况下)。

这样,我们就建立了一个安全的"信道"。

猜你喜欢

转载自blog.csdn.net/qq_37247026/article/details/129450463