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

通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程。

一、使用Wireshark解密HTTPS流量的方法

TLS对传输数据进行了加密,直接使用Wireshark查看,TSL协议之上的协议细节(应用层 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

原文地址:https://www.cnblogs.com/fanyegong/p/12212692.html

时间: 2024-10-28 20:06:47

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

Wireshark查看https的通讯

如果有服务端的证书,那我们可以分析web下https的通讯情况,在特别的场景下有一定的用处,如外部审计 如下是在wireshark或tshark中配置查看https的设置 wireshark验证 tshark验证 tshark -f "tcp and port 443" -i eth2 -o "ssl.keys_list:192.168.0.155,443,http,/root/tmp/a.crt" 15.852877 192.168.0.155 -> 192

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

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTPS 和 HTTP的区别 显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transp

SSL/TLS 握手优化详解

随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer Security),保证了传输层安全,同时也给 Web 性能优化带来新的挑战.上次写的「使用 BoringSSL 优化 HTTPS 加密算法选择」一文中,我介绍了如何针对不同平台启用最合适的传输加密算法.本篇文章我打算继续写 HTTPS 优化 -- TLS 握手优化. 先来补充一个小知识:SSL(S

HTTPS加密原理与过程

HTTPS加密原理与过程 HTTP 超文本传输协议一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 优点: 传输速度快 HTTPS HTTPS 并非是应用层的一种新协议.只是 HTTP 通信接口部分用 SSL (安全套接字层)和TLS (安全传输层协议)代替而已.即添加了加密及认证机制的 HTTP 称为 HTTPS ( HTTP Secure ). HTTP + 加密 + 认证 + 完整性保护

TLS握手

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布. 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞. 1996年,SSL 3.0版问世,得到大规模应用. 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版. 2006年和2008年,TLS进行了两次升级,分

HTTPS中的TLS

1. SSL 与 TLS SSL:(Secure Socket Layer) 安全套接层,于 1994 年由网景公司设计,并于 1995 年发布了 3.0 版本TLS:(Transport Layer Security)传输层安全性协议,是 IETF 在 SSL3.0 的基础上设计的协议以下全部使用 TLS 来表示 2. 从网络协议的角度理解 HTTPS HTTP:HyperText Transfer Protocol 超文本传输协议HTTPS:Hypertext Transfer Protoc

HTTPS握手过程

HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密.具体是如何进行加密,解密,验证的,且看下图,下面的称为一次握手. 1. 客户端发起HTTPS请求 2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书.区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面.这套证书其实就是一对公钥和私钥.公钥给别人加密使用,私钥给自己解密使用. 3. 传送证书 这个证书其

安全与加密-SSL交互与握手过程 创建CA和证书管理

上一篇章中我们讲了使用gpg和openssl加密公钥进行安全数据通讯的场景.可是,网络中总是有不怀好意的角色存在,别以为你以公钥加密了就是安全的,有没有想过,你得到的这个公钥是不是真正要跟你通讯的服务器公钥呢?万一被伪造了?那将会如下图,黑客能打开加密的文件,而真正的ServerB却无法解开密文. 所以,就如现实生活中,大家都要确认某样东西的真实性的时候,找第三方权威机构,把各自己的信息交回权威机构进行验证后,再由权威机构公布各自需要的信息. 如下图,CA证书机构就是用来做这事的. 既然有了第三

wireshark分析https

0x01 分析淘宝网站的https数据流 打开淘宝 wireshark抓取到如下 第一部分: 因为https是基于http协议上的,可以看到首先也是和http协议一样的常规的TCP三次握手的连接建立,请求的是服务器的443端口. 1.客户端向443端口发送SYN信号 2.服务端回应连接,ACK 3. tcp/ip三次握手完成 第二部分: 接下来从第4个数据包开始,其实就是SSL握手过程中所产生的数据包,也就是使用HTTPS协议加密的信息. 1.  初始化阶段.客户端创建随机数,发送ClientH