HTTPS抓包连接过程

本文详细解析了TLS握手流程,包括ClientHello、ServerHello、Server证书及KeyExchange、ClientKeyExchange等步骤,介绍了客户端和服务端如何协商加密套件、验证证书并建立安全连接。重点讨论了证书验证、秘钥协商以及数据验证的过程。
摘要由CSDN通过智能技术生成

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安全连接就已经建立。

HTTP/HTTPS协议分析工具(Http Analyzer)7.5.3.455 汉化特别版 HTTP Analyzer 分两部份,可以集成在IE浏览器中抓包,也可以单独的安装应用程序的包,非常实用。 压缩包内有注册机,大家根据需要选择相应的产品获取注册码。 这是一款实时分析 HTTP/HTTPS 数据流的工具。它可以实时捕捉HTTP/HTTPS 协议数据,可以显示许多信息(包括:文件头、内容、Cookie、查询字符窜、提交的数据、重定向的url地址),可以提供缓冲区信息、清理对话内容、HTTP状态信息和其他过滤选项。同时还是一个非常有用的分析、调试和诊断的开发工具。 Http Analyzer是一个HTTP/HTTPS协议分析工具,用此工具可以非常快速的分析出绝大多数视频博客的视频地址。尽管有一些网站提供了诸如 YouTube ,Google Video 等视频网站的php解码程序,不过那些php程序并不是通用的。当博客视频网站对视频地址加密算法做些变动时,php程序又需要大规模改动才能对应解码。 使用类似Http Analyzer协议分析工具就不同了,所有的博客视频都是http方式提供的,最终的http路径是肯定要明文出现的,所以获取此路径是可能的。 HTTP/HTTPS协议分析工具(Http Analyzer)使用方法 第一步:设置好Http Analyzer的过滤器选项大部分的视频博客的Type都是 video/flv ,video/x-flv ,application/octet-stream 极少部分采用application/x-shockwave-flash 或干脆不表明类型。http的返回结果肯定是2XX,所以在Result 要设置成<300。返回的Size最好采用倒序排列,视频博客的大小一般比较大,倒序容易发现。 第二步:运行Http Analyzer:(点击工具栏第一个绿色箭头图标)打开YouTube 或6rooms视频博客网站。回到Http Analyzer窗口,看你需要的视频地址是不是老老实实的呆在里面呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值