TLS握手流程分析

在了解了TLS的协议分层结构之后,回过头来看我们所抓到的数据包,结合实际的数据包来了解一下TLS的握手流程以及握手过程中产生了哪些数据的交互,TLS的握手流程如下图所示:

4.1 客户端 —— Client Hello

首先是客户端发送了一个Client Hello报文:

从抓到的数据包来看,其握手层协议类型为Handshake,主要数据内容有以下几种:

Random: 一个客户端随机数,参与了SSL握手的 master key的计算、KDF计算、server_key_exchange的签名值的计算
Cipher Suites:加密套件 主要分为四个部分,以加密套件 { ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA38 }为例,表示该加密套件适用于TLS1.2版本,秘钥交换算法为ECDH、认证算法为ECDSA、数据加密算法为AES(256)、MAC算法为SHA38
Compression Methods: TLS记录层协议锁使用的数据压缩算法
Extension: 扩展选项 因为TLS在HTTP之前,此时尚无HTTP请求头的概念,如果需要指定域名,则需要通过扩展选项server_name来指定

我们只需要大概了解这些字段的基本含义即可,涉及到密码学的东西有余力的情况下再去以点破面自行了解。

4.2 服务端 —— Server Hello

在客户端在收到客户端发来的Client Hello包之后,会返回一个Server Hello包给客户端

Server Hello包中包含服务端生成的Random随机数、TLS协议版本、Sesssion ID 和 数据压缩方法,最主要的是返回了服务端根据Client Hello中的参数最终选择的加密套件Cipher Suite。

4.3 服务端 —— Certificate、Server Key Exchange、Server Hello Done

服务端在返回了Server Hello数据包之后,紧接着向客户端返回自己的证书和一个 Server Key Exchange报文,用于秘钥协商,最后再发送一个Server Hello Done告诉客户端SSL第一次握手结束了。

服务端返回的证书应该说是一个证书链,如上图所示,可以看到服务端其实返回了两个证书。一般来说,服务端证书链通常配置成三级,【站点证书】——【中间证书】——【根证书】,根证书通常是内置在操作系统或者支持HTTPS的应用当中的,所以为了减少开销一般不会将根证书也返回。

【扩展】:TLS分为单向认证和双向认证两种,顾名思义单向认证就是只需要客户端去验证服务端的身份,而双向认证需要服务端也要验证客户端的请求,但是十分消耗资源,导致性能低下,所以一般都不会开启双向认证。如果开启了双向认证,服务端还需要在Server Hello Done之前发送一个CertificateRequest数据包,然后客户端在收到Server Hello Done数据包之后需要向服务端发送一个Certificate数据包。

4.4 客户端 —— Client Key Exchange、ChangeCipher Spec、Encrypted Handshake Message

客户端在收到服务端发送来的Sever Hello Done包之后,开始验证证书的有效性,如果证书有效之后,才会继续进行这一步。验证证书有效性主要包括:证书链是否可信、证书是否吊销、证书有效期、域名检验。

证书验证通过后,客户端向服务端发送的主要有这几个参数:

client_key_exchange: 客户端计算产生随机数字pre-master,并且用服务端公钥加密,发送给服务端,客户端以后具有自己的随机数A和服务端的随机数B,结合pre-master计算出协商得到的对称秘钥
change cipher spec:客户端通知服务器后续的同学新都采用协商的秘钥进行加密通信
encrypted handshake message: 计算前面向服务端发送的数据生成一个hash作为摘要,并且使用协商秘钥加密后,发送到服务端进行数据和握手验证

4.5 服务端 —— New Session Ticket,Change Cipher Spec、Encrypted Handshake Message

服务端在收到客户端的加密的pre - master后,通过自己的私钥解密,然后根据签名协商得到的随机数A和B生成协商秘钥,然后使用协商秘钥解密被加密的摘要,再将前面接收到的所有客户端发送过来的相关安全参数进行hash之后,比较两边的摘要是否相同,从而验证握手是否合法。验证通过之后向客户端发送以下几个数据包:

Change Cipher Spec: 服务端通知客户端后续的通信都采用协商秘钥进行加密
Encrypted Handshake Message:服务端也将自己已经发送给客户端的数据经过hash后再加密发送给客户端,让客户端进行有效性验证

4.6 安全连接建立,发送加密数据 —— Application Data

当客户端收到服务端传递过来的Encryted Handshake Message,使用协商秘钥解密并且验证有效后,则说明连接成功建立,之后的所有数据将使用协商秘钥进行加密:

如下图所示,加密后的数据通过TLS握手层的应用数据协议进行封装,发送给对:

至此TLS/SSL安全连接就已经建立。

HTTPS抓包连接过程相关推荐

  1. fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Fiddler的HTTPS抓包功能." 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启, ...

  2. fiddler https 抓包

    原理 fiddler抓包原理 fiddler 调试器注册到操作系统因特网服务中,系统所有的网络请求都会走fiddler的代理,所以fiddler才能抓包. Debug traffic from any ...

  3. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

    市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(A ...

  4. Charles 4.2.1 HTTPS抓包

    Charles 4.2.1 HTTPS抓包 Charles iPhone抓包 Mac必须与iPhone连接同一WiFi Proxy -> SSL Proxying Settings ->  ...

  5. 移动端https抓包那些事--初级篇

    对于刚刚进入移动安全领域的安全研究人员或者安全爱好者,在对手机APP进行渗透测试的时候会发现一个很大的问题,就是无法抓取https的流量数据包,导致渗透测试无法继续进行下去. 这次给大家介绍一些手机端 ...

  6. IOS https抓包及10.3.3版本证书不生效问题解决

    Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. HTTP抓 ...

  7. https抓包_浅谈HTTPS抓包原理,为什么Charles能够抓取HTTPS报文?

    Charles作用其实相当于拦截器,当客户端和服务器通信时,Charles其实会先接收到服务器的证书,但是它会自己生成一个证书发送给客户端(不管是Web端或App应用),也就是说它不仅仅是拦截,甚至还 ...

  8. mac下HTTP与HTTPS抓包

    mac下HTTP与HTTPS抓包 HTTP抓包流程 1. 在mac 电脑 上下载代理软件,charlse或者fiddler均可以: 下载方法:http://www.charlesproxy.com/可 ...

  9. Whistle pc抓包,手机抓包,https抓包

    此文章已不再更新,查看最新版文章与更多内容: 右键在新标签页中打开链接. <Whistle pc抓包,手机抓包,https抓包> ----------------------------- ...

最新文章

  1. 【Spark Summit East 2017】Kerberizing Spark
  2. (数据结构与算法)数组模拟队列和环形队列
  3. Oracle技术之OCRCONFIG工具
  4. Visual Studio 32位64位的问题和如何编译32位64位工程的问题
  5. Tensorflow详解保存模型(基础版)
  6. 案例二:动态页面模拟点击
  7. 计算机专业学习课程推荐
  8. 文献阅读-Pan-Cancer Analysis of lncRNA Regulation Supports Their Targeting of Cancer Genes in Each Tumor
  9. Physics Bodies(中文翻译)—UE4官方文档
  10. 使用instsrv.exe和srvany.exe创建windows服务
  11. 【二次开发应用】安信可ESP32/ESP8266模组入网阿里生活物联网平台
  12. [AS3.0.1]蓝牙的基本使用,搜索和配对
  13. Python实现的简易HTTP代理服务器
  14. 以太网结构框架的学习
  15. Acwing 1191. 家谱树 (topsort
  16. 简化版的宿舍管理系统(有细微的逻辑问题,没优化)
  17. 微信小程序 slot插槽基本使用
  18. linux网络编程tcp和udp基本函数调用过程及如何选择
  19. 百度计算机调试员论文,基于西门子工业软件的仿真专业系统设计一阶惯性加纯滞后对象百度精.doc...
  20. 2022年汽车配件市场分析

热门文章

  1. 利用Python3四舍五入保留两位小数
  2. Arcgis二次开发——建立自己的小工程
  3. DIX和DIF该诉你,什么叫端到端数据一致性
  4. BLE-1の蓝牙4.0协议栈概览
  5. 【Redis】Redis慢查询
  6. [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)
  7. 数据说的舆情分析的算法模型的建立
  8. 网络数据包最大长度 MTU 分片 科普
  9. 非极大抑制(Non-Maximum Suppression)
  10. 电信天翼云搭建Halo博客