使用Wireshark查看HTTPS中TLS握手过程
通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程。
一、使用Wireshark解密HTTPS流量的方法
TLS对传输数据进行了加密,直接使用Wireshark查看,TLS协议之上的协议细节(应用层 HTTP)完全看不到,因此需要解密后,才能查看。解密方法如下:
1.在Wireshark官网下载系统对应的Wireshark安装包,进行安装
2.增加系统环境变量设置(计算机 -- 右键 -- 属性--高级系统设置--高级--环境变量--系统变量--新建)
变量名:SSLKEYLOGFILE
变量值:%USERPROFILE%\sslkeysENV.pms
3.在CMD使用命令行启动chrome浏览器
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ssl-key-log-file=%USERPROFILE%\sslkeysARG.pms
4.设置Wireshark
(1)打开Wireshark--编辑--首选项--Protocols--SSL
(2)设置(Pre)-Master-Secret log filename
C:\Users\用户名\sslkeysARG.pms (路径 就是 %USERPROFILE%的值)
(3)设置SSL debug file (此步骤可选,用来记录解密的日志)
C:\Users\用户名\ssl.log (路径 就是 %USERPROFILE%的值)
5.此时便可以在Wireshark中查看HTTPS的流量了
下面是解密前后对比图:


二、完整的TLS握手过程

上图是完整的TLS握手的过程,TLS运行在传输层协议之上,蓝色的部分是TCP握手阶段。假设服务器与客户端的传输时间是28ms。我们通过Wireshark的抓包来逐条分析:

1. 在0ms,客户端发送SYN分组开始TCP握手;
2. 在28ms,服务器响应SYN-ACK分组;
3.在56ms,客户端确认SYN-ACK;
同时,立即发送Client Hello,也是TLS握手的第一步,将TLS的版本、所支持的加密套件列表、支持或希望的使用的TLS扩展选项发送给服务器。

其中server_name 为SNI(Server Name Indication,服务器名称指示)扩展,与HTTP中Host首部相似,在握手之初就指定要连接的主机名。对于相同IP服务不同域名的情况,就可以使用SNI区分不同的域名。

其中Application Layer Protocol Negotiation 为ALPN应用层协议协商扩展,在TLS握手的同时协商应用协议,节省HTTP Upgrade机制带来的额外的往返时间。

4. 在84ms,服务器发送Server Hello,Certificate,(Server Key Exchange),Server Hello Done
服务器取得TLS协议版本用于之后的通信,从客户端提供的加密套件里选择一个,选择HTTP协议版本,附上自己的证书,发送给客户端。作为可选项,服务器也可以发送一个请求,要求客户端提供证书及其他TLS扩展参数。



5. 在112ms,客户端发送Client Key Exchange,Change Cipher Spec,Finished
客户端生成一个新的对称密钥,用服务器的公钥加密,发送给服务器,告知服务器可以开始加密通信了。

6. 在140ms,服务器端发送(New Session Ticket),Change Cipher Spec,Finished
服务器解密出客户端发来的对称密钥,通过验证消息的MAC检查消息的完整性,再返回给客户端一个加密的“Finished”消息。因为是第一次建立会话,还发送了New Session Ticket。

7. 在168ms,开始传输应用层数据。
三、简短的TLS握手过程
为了节省握手往返次数,TLS提供了恢复功能,通过服务器端的会话标识符或客户端的会话记录单机制,也被称为会话缓存或无状态恢复机制,减少协商次数。

1. 在0ms,客户端发送SYN分组开始TCP握手;
2. 在28ms,服务器响应SYN-ACK分组;
3.在56ms,客户端确认SYN-ACK;
同时,立即发送Client Hello,也是TLS握手的第一步,将TLS的版本、Session ID、所支持的加密套件列表、支持或希望的使用的TLS扩展选项发送给服务器。

4. 在84ms,服务器发送Server Hello,Change Cipher Spec,Server Hello Done

5. 在112ms,客户端发送Change Cipher Spec,Finished

同时,立即可以传输应用层数据。
参考资料:
3.https://imququ.com/post/http2-traffic-in-wireshark.html
使用Wireshark查看HTTPS中TLS握手过程的更多相关文章
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...
- SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...
- SSL/TLS握手过程
----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS ...
- Wireshark查看https的通讯
如果有服务端的证书,那我们可以分析web下https的通讯情况,在特别的场景下有一定的用处,如外部审计 如下是在wireshark或tshark中配置查看https的设置 wireshark验证 ts ...
- HTTPS和SSL握手过程(转载)
https介绍 HTTPS = HTTP + 一组对称.非对称和基于证书的加密技术 HTTPS是最常见的HTTP安全版本.它得到了很广泛的应用,所有主要的商业浏览器和服务器都提供HTTPS.HTTPS ...
- HTTPS - 揭秘 TLS 1.2 协议完整握手过程--此文为转发文,一定要结合wirshark工具看,很清楚
winshark 筛选条件为:tls and ip.src==xxx 本文通过对一次 TLS 握手过程的数据抓包分析做为切入点,希望能进一步的帮助大家理解 HTTPS 原理. HTTPS 是建立在 S ...
- HTTPS中SSL/TLS握手时的私钥用途(RSA、ECDHE)
从上一篇HTTPS中CA证书的签发及使用过程中知道服务端在申请CA证书时只上交了密钥对中的公钥,那么只有服务端知道的私钥有什么作用呢? SSL/TLS层的位置 SSL/TLS层在网络模型的位置,它属于 ...
- HTTPS详解二:SSL / TLS 工作原理和详细握手过程
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...
- TLS握手优化详解
随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Laye ...
- SSL/TLS 握手优化详解
随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer ...
随机推荐
- 怎么解决CMD下执行Go出现中文乱码问题?
目录 1.报错信息如下 2.原因分析 3.解决方法 4.封装处理乱码方法 5.解决乱码完整代码 1.报错信息如下 2.原因分析 因为Go的编码是UTF-8,而CMD的活动页是cp936(GBK),因此 ...
- 杭电oj 求奇数的乘积
#include <stdio.h> #include <stdlib.h> int main() { int i,n,a; int sum = 1; while(scanf( ...
- pytorch学习笔记(4)--dataloader
batch_size:有多少张 shuffle=True:顺序不打乱 num_workers: 进程数 drop_last:最后不够64张是否舍去 import torchvision from to ...
- IIS10.0 Web平台安装程序无法安装URL重写工具
Windows10系统的IIS10.0需要安装URL rewrite重写模块2.0,提示"很遗憾,无法安装下列产品",解决方法: win键+R键,运行regedit,打开注册表编辑 ...
- dos命令初学
DOS命令 打开DOS命令方式 开始+系统+命令提示符 WIN键盘+R 输入CMD 打开控制台(推荐使用) 在任意文件夹下面,按住shift键加鼠标右键点击,在此处打开命令行窗口 自愿管理器的地址栏前 ...
- Linux 使用vsftpd服务传输文件
文件传输协议 FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命 ...
- tensorflow 模型批处理参数tensor快速赋值参考
批处理调用模型的时候,如果逐像素给tensor对象数据部分赋值的话,效率是很低的,尤其是对于一些图片数据,所以数据块直接拷贝可以大大提高效率, 先取得数据指针: output_tensor->f ...
- axios取消重复请求与更新token并续订上次请求
一.问题引入 当用户发起一个请求时,判断token是否已过期,若已过期则先调refreshToken接口,拿到新的token后再继续执行之前的请求. 难点:当同时发起多个请求,token 过期会调用多 ...
- C#中的范围类型(Range Type)
//语法糖Rangestatic void Main(string[] args) { var myArray = new string[] { "Item1", "It ...
- kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署
1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 2.安装kubernetes 2.1 关闭防火墙 在每台机器上关闭防火墙: ① 关闭服务,并设为开机不自启 $ ...