HTTPS RSA 握手解析

HTTPS RSA 握手解析

学习资源 小林coding 2022.4.1 愚人节快乐!

TLS握手过程

HTTP 明文传输 客户端与服务器通信的信息是肉眼可见 抓包可以截取通信内容

安全风险:

  • 窃听风险
  • 篡改风险
  • 冒充风险

HTTPS在HTTP与TCP层之间加入了TLS协议 来解决上述的风险

HTTPS RSA 握手解析_第1张图片

TLS协议是如何解决HTTP的风险呢?

  • 信息加密
  • 校验机制
  • 身份证书

在进行HTTP通信前 需要先进行TLS握手

HTTPS RSA 握手解析_第2张图片

记录是TLS收发数据的基本单位

多个记录可以组合成一个TCP包发送

通常经过四个消息就可以完成TLS握手 也就是需要2个RTT时延

密钥交换算法:性能问题 双方在加密应用信息时使用的是对称加密密钥

而 对称加密密钥是不能被泄露的 为了保证对称加密密钥的安全性 采用非对称加密的方式来保护对称加密密钥的协商

密钥交换算法:RSA

RSA握手过程

传统的TLS握手基本是使用RSA算法来实现密钥交换的

在将TLS证书部署服务端时 证书文件中包含一对公私钥

公钥会在TLS握手阶段传递给客户端 私钥留在服务端 保证私钥不能外泄

RSA算法中 客户端会生成随机密钥 并使用服务端的公钥加密后传给服务端

根据非对称加密算法 公钥加密的信息只能通过私钥解密 服务端加密后 得到共同密钥 加密信息

TLS第一次握手

客户端首先会发送一个Client Hello消息 跟服务器打招呼

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XziMQ4sc-1648780520002)(https://cdn.jsdelivr.net/gh/xiaolincoder/ImageHost4@main/网络/https/clienthello.png)]

  • 客户端使用的TLS版本号
  • 随机数 被服务端保留 生成对称加密密钥
  • 支持的密码套件列表

TLS第二次握手

服务端收到客户端的Client Hello消息后 确认TLS版本号是否支持

从密码套件列表中选择一个密码套件 以及生成随机数HTTPS RSA 握手解析_第3张图片

返回Server Hello消息

  • 服务器确定的TLS版本号
  • 随机数
  • 从客户端选择的合适的密码套件

密码套件格式:密钥交换算法 签名算法 对称加密算法 摘要算法

  • WITH前 约定密钥交换算法 证书验证算法 RSA
  • 握手之后的通信算法 AES 对称算法 密钥长度128 分组模式 GCM
  • 摘要算法 SHA256 消息认证和产生随机数HTTPS RSA 握手解析_第4张图片

服务端证明身份 发送 Server Certificate给客户端

  • 内含数字证书

服务端发送 Server Hello Done 目的告诉客户端 打招呼完毕

TLS第三次握手

客户端验证完证书之后 认为可信则继续向下走

客户端生成新的随机数 用服务器的RSA公钥加密该随机数

通过 Change Cipher Key Exchange消息传给服务端

服务器收到后 用RSA私钥解密 得到随机数

至此有三个随机数 分别是

  • Client Random
  • Server Random
  • pre-master

双方根据三个随机数 生成会话密钥 对称密钥 ->用于对后续的HTTP/响应的数据加解密

生成会话密钥之后 客户端发送 Change Cipher Spec 告诉服务端开始使用加密方式发送信息

之后服务端发送 Encrypted Hankshake Message(Finished)消息 把之前所有发送的数据做个摘要

再用会话密钥加密 服务器验证 验证是否篡改

Change Cipher spec之前传输的TLS握手数据 都是明文 之后都是堆成密钥加密的密文

TLS第四次握手

同样操作 发送

  • Change Cipher Spec

  • Encrypted Hankshake Message(Finished)

如果双方加解密没有问题 握手正式完成

客户端验证证书

客户端拿到了服务端的数字证书 如何校验证书是真实有效的呢

数字证书和CA机构

数字证书包含:

  • 公钥
  • 持有者信息
  • 证书认证机构(CA)的信息
  • CA对这份文件的数字签名以及使用的算法
  • 证书有效期
  • 其他额外的信息

数字证书的作用: 认证公钥持有者身份 防止第三方冒充

证书是用来告诉客户端 该服务器是否是合法的 只有证书合法 才代表服务端身份是可信的

服务端的证书都是由CA 证书认证机构 签名 -> 避免中间人在获取证书时对证书内容的篡改

数字证书签发和验证流程

HTTPS RSA 握手解析_第5张图片

CA签发证书:

  • CA把持有者的公钥 用途 颁发者 有效时间等信息打包 对其进行HASH运算
  • CA使用自己私钥将HASH加密 生成签名
  • 将签名加到证书上 形成数字证书

客户端校验服务端数字证书流程:

  • 客户端使用同样的HASH算法 获取该证书HASH值
  • 浏览器 操作系统 集成了CA的公钥信息 浏览器收到证书后 使用CA的公钥解密签名内容 得到HASH
  • 比较 相同则为信赖证书

证书链

证书验证过程种 存在证书信任链的问题

CA申请证书 一般不是根证书签发 是由中间证书签发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXrro1LD-1648780520005)(https://cdn.jsdelivr.net/gh/xiaolincoder/ImageHost4@main/网络/https/baidu证书.png)]

最开始客户端只信任根证书 GlobalSign Root CA 证书的,然后 “GlobalSign Root CA” 证书信任 “GlobalSign Organization Validation CA - SHA256 - G2” 证书,而 “GlobalSign Organization Validation CA - SHA256 - G2” 证书又信任 baidu.com 证书,于是客户端也信任 baidu.com 证书。

HTTPS RSA 握手解析_第6张图片

HTTPS RSA 握手解析_第7张图片

证书链: 保证根证书的绝对安全性 将根证书隔离的越严格越好

RSA算法缺陷

不支持前向保密

客户端传递随机数给服务器使用公钥加密

服务端收到私钥解密

如果服务器私钥泄露 所有TLS通讯密文都会被破解

你可能感兴趣的:(计算机网络,网络协议)