通过使用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

同时,立即可以传输应用层数据。

参考资料:

1.https://hpbn.co/

2.https://stackoverflow.com/questions/42332792/chrome-not-firefox-are-not-dumping-to-sslkeylogfile-variable

3.https://imququ.com/post/http2-traffic-in-wireshark.html

使用Wireshark查看HTTPS中TLS握手过程的更多相关文章

  1. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

    SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...

  2. SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

  3. SSL/TLS握手过程

    ----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS ...

  4. Wireshark查看https的通讯

    如果有服务端的证书,那我们可以分析web下https的通讯情况,在特别的场景下有一定的用处,如外部审计 如下是在wireshark或tshark中配置查看https的设置 wireshark验证 ts ...

  5. HTTPS和SSL握手过程(转载)

    https介绍 HTTPS = HTTP + 一组对称.非对称和基于证书的加密技术 HTTPS是最常见的HTTP安全版本.它得到了很广泛的应用,所有主要的商业浏览器和服务器都提供HTTPS.HTTPS ...

  6. HTTPS - 揭秘 TLS 1.2 协议完整握手过程--此文为转发文,一定要结合wirshark工具看,很清楚

    winshark 筛选条件为:tls and ip.src==xxx 本文通过对一次 TLS 握手过程的数据抓包分析做为切入点,希望能进一步的帮助大家理解 HTTPS 原理. HTTPS 是建立在 S ...

  7. HTTPS中SSL/TLS握手时的私钥用途(RSA、ECDHE)

    从上一篇HTTPS中CA证书的签发及使用过程中知道服务端在申请CA证书时只上交了密钥对中的公钥,那么只有服务端知道的私钥有什么作用呢? SSL/TLS层的位置 SSL/TLS层在网络模型的位置,它属于 ...

  8. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  9. TLS握手优化详解

      随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Laye ...

  10. SSL/TLS 握手优化详解

    随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer ...

随机推荐

  1. k8s master高可用

    每台master都要部署haproxy,keepalived keepalived 配置文件:! Configuration File for keepalivedglobal_defs { rout ...

  2. vagrant用密码连接ssh

    1通过 ssh address连接 1:进去linux 2:修改配置文件信息 vi /etc/ssh/sshd_config 修改 passwordAuthentication no 改为 passw ...

  3. linux 系统⽇常管理--运维必备

    [监控系统的状态] 1. w 查看当前系统的负载 相信所有的linux管理员最常⽤的命令就是这个'w' 了,该命令显⽰的信息还是蛮丰富 的.第⼀⾏从左⾯开始显⽰的信息依次为:时间,系统运⾏时间,登录⽤ ...

  4. nebula命令行无法查看配置信息

    版本为nebula2.0.1 正在部署集群,节点数比较多,直接在一个节点配置好配置文件,分发到其他节点, 为了减少后续修改配置文件时再为配置文件添加--local_config=true,所以直接加上 ...

  5. SQL 用 in 大于 1000 问题解决

    -- 今天生成环境数据突然多,系统异常 解决方案(必须用in 业务情况),也可以用其他函数解决 union all  或者 exists 等 1:截取list List<Integer>  ...

  6. 问题:配置apache的相关配置文件报错:Invalid command 'Order' (已解决)

    1. 问题描述 在虚拟文件httpd-vhosts.conf里面,directory里加入Order allow,deny,重启apache,出现Invalid command 'Order', pe ...

  7. leetcode 875. 爱吃香蕉的珂珂

    珂珂喜欢吃香蕉.这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 h 小时后回来. 珂珂可以决定她吃香蕉的速度 k (单位:根/小时).每个小时,她将会选择一堆香蕉, ...

  8. AIGC 至少能在两个方面改变当前的世界-纯银

    互联网圈一个正在形成的共识是,web3 只是金融领域的创新,还没有任何征兆能进入大众社会,但 AIGC 对世界的改变正在眼前发生.AIGC 至少能在两个方面改变当前的世界.1.对于缺乏创造力的(文字) ...

  9. js-classList用法学习记录1

    classList introduction: 学习后我的个人理解是,在给html中创建的类一系列操作的方法调用. detailed method: 网站具体介绍(菜鸟) add:添加类,已有则不添加 ...

  10. MAC读写模式自动挂载硬盘/不自动挂载硬盘

    一.卸载硬盘 sudo umount /dev/disk1s1 自己从磁盘工具获取设备ID 或使用终端命令:diskutil list 来获取 二.新建文件夹以供挂载,位子自选 sudo mkdir ...