使用Wireshark查看HTTPS中TLS握手过程

摘要:
通过使用Wireshark数据包捕获分析TLS握手过程,更容易理解和验证TLS协议。本文将首先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和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)GoogleChromeApplicationchrome.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的流量了

下面是解密前后对比图:

使用Wireshark查看HTTPS中TLS握手过程第1张

使用Wireshark查看HTTPS中TLS握手过程第2张

二、完整的TLS握手过程

使用Wireshark查看HTTPS中TLS握手过程第3张

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

使用Wireshark查看HTTPS中TLS握手过程第4张

1. 在0ms,客户端发送SYN分组开始TCP握手;

2. 在28ms,服务器响应SYN-ACK分组;

3.在56ms,客户端确认SYN-ACK;

 同时,立即发送Client Hello,也是TLS握手的第一步,将TLS的版本、所支持的加密套件列表、支持或希望的使用的TLS扩展选项发送给服务器。

使用Wireshark查看HTTPS中TLS握手过程第5张

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

使用Wireshark查看HTTPS中TLS握手过程第6张

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

使用Wireshark查看HTTPS中TLS握手过程第7张

4. 在84ms,服务器发送Server Hello,Certificate,(Server Key Exchange),Server Hello Done

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

使用Wireshark查看HTTPS中TLS握手过程第8张

使用Wireshark查看HTTPS中TLS握手过程第9张

使用Wireshark查看HTTPS中TLS握手过程第10张

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

客户端生成一个新的对称密钥,用服务器的公钥加密,发送给服务器,告知服务器可以开始加密通信了。

使用Wireshark查看HTTPS中TLS握手过程第11张

6. 在140ms,服务器端发送(New Session Ticket),Change Cipher Spec,Finished

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

使用Wireshark查看HTTPS中TLS握手过程第12张

7. 在168ms,开始传输应用层数据。

三、简短的TLS握手过程

为了节省握手往返次数,TLS提供了恢复功能,通过服务器端的会话标识符或客户端的会话记录单机制,也被称为会话缓存或无状态恢复机制,减少协商次数。

使用Wireshark查看HTTPS中TLS握手过程第13张

1. 在0ms,客户端发送SYN分组开始TCP握手;

2. 在28ms,服务器响应SYN-ACK分组;

3.在56ms,客户端确认SYN-ACK;

 同时,立即发送Client Hello,也是TLS握手的第一步,将TLS的版本、Session ID、所支持的加密套件列表、支持或希望的使用的TLS扩展选项发送给服务器。

使用Wireshark查看HTTPS中TLS握手过程第14张

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

使用Wireshark查看HTTPS中TLS握手过程第15张

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

使用Wireshark查看HTTPS中TLS握手过程第16张

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

参考资料:

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握手过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Guideline 5.2.1SpringBoot起飞系列-使用idea搭建环境(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

保障接口安全的5种常见方式

一般有五种方式:1、Token授权认证,防止未授权用户获取数据;2、时间戳超时机制;3、URL签名,防止请求参数被篡改;4、防重放,防止接口被第二次请求,防采集;5、采用HTTPS通信协议,防止数据明文传输; 所有的安全措施都用上的话有时候难免太过复杂,在实际项目中需要根据自身情况作出取舍,比如可以只使用签名机制就可以保证信息不会被篡改,或者定向提供服务的...

Satis搭建composer私有库(自定义下载目录)

        在我们的日常php开发中需要使用大量的第三方包和类库, 怎么管理是一个问题,         我们用的Yii2框架, 但是并没有把composer用起来, 由于最近更换为docker部署项目, 于是想起来用composer来管理包并降低部署代码的时间 安装composer(在你当做私有库的服务器上以及开发环境)   参考  https://...

Linux抓包工具tcpdump使用总结,WireShark的过滤用法

tcpdump与WireShark是Linux下的两个常用,功能强大的抓包工具,下面列出这两个工具的简单用法。 tcpdump用法 tcpdump用法: sudo tcpdump -i ens33 src 192.168.0.19 port 80 -xx -Xs 0 -w test.capsudo tcpdump -i ens33 src port 80...

Nginx 安装及配置、负载均衡https网站及转发后页面js、css等路径找不到问题、更换证书导致问题解决

官网下载nginx:http://nginx.org/en/download.html 安装nginx编译环境:yum install -y gcc-c++ 安装pcre库解析正则:yum install -y pcre pcre-devel 安装zlib库用于压缩解压缩:yum install -y zlib zlib-devel 安装openssl库...

GJK碰撞检测算法

https://blog.lufei.so/#/collisionDetection/GJK/1 https://blog.lufei.so/#/collisionDetection/GJK/2 现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图。在二进制的世界里,一切就没这么直观了。 GJK(Gilbert-Johnson-Keerthi...

推荐几款优质 Chrome 摸鱼插件,带你畅快划水

在日常工作过程中,对大部分的人来说,肯定少不了摸鱼,相信大家都是小心翼翼在摸鱼 ​如果你不能高效地摸鱼,说明你没有将工具用到极致 今天将为大家推荐几款 Chrome 摸鱼插件,帮助大家高效摸鱼、畅快划水 一键赖皮 一键赖皮是一款用于日常上班摸鱼的插件,可以快速关闭、打开(还原)网页 可以自定义几个赖皮的网站,通过 Ctrl + S 快捷键(也可以通过修...