分享

HTTPS报文抓包流程笔记(202206201611)

 gyc8848 2022-06-20 发布于广东

简单抓了个HTTPS包,过了一遍流程。不涉及具体技术细节。

几项关键技术的简单说明,详见这篇笔记:

HTTPS相关算法基本概念-知乎专栏

HTTPS简单来说,就是使用SSL对HTTP报文进行加密传输。

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

一、密文解析方法:

HTTPS报文本身是加密的,wireshark也无法解析。因此需要将HTTPS生成的随机数(premaster-secret)提供给wireshark,wireshark才能正确解读密文。

具体配置方法(WINDOWS):

建立path变量 SSLKEYLOGFILE=c:\ssl.key
重启firefox/chrome,访问https网站会自动生成ssl session key
在wireshark中配置:编辑-首选项-Protocol-SSL-(Pre)-Master-Secret log filename 设置为之前配置的ssl.key文件,即可解密抓到的SSL密文

二、准备过程(DNS、TCP与302跳转):

在电脑浏览器输入

www.baidu.com

,此时请求的是HTTP报文。

2.1 DNS解析:获得baidu网站IP地址

2.2 TCP建立连接:HTTP服务基于TCP连接,根据前述DNS解析结果建立连接。

2.3 HTTP请求与响应:可见,服务器响应了一个302 Moved Temporarily 重定向报文,定向到 https://www.baidu.com,接下来进入HTTPS报文请求环节。

三、SSL/TLS报文交互(即HTTPS如何通过非对称算法得到一个对称密钥用于加密)

注:此处发生了一次乱序,导致了一次SACK确认,181与180行的先后顺序颠倒了。

下图为TLS/SSL报文交互流程示意图。

      Client                                               Server

         ClientHello
        (empty SessionTicket extension)-------->
                                                         ServerHello
                                     (empty SessionTicket extension)
                                                        Certificate*
                                                  ServerKeyExchange*
                                                 CertificateRequest*
                                      <--------      ServerHelloDone
         Certificate*
         ClientKeyExchange
         CertificateVerify*
         [ChangeCipherSpec]
         Finished                     -------->
                                                    NewSessionTicket
                                                  [ChangeCipherSpec]
                                      <--------             Finished
         Application Data             <------->     Application Data

其中ServerKeyExchange为DH算法专有(RSA算法则无)

175报文:用户端发起Client Hello,携带版本信息与random数(客户端),并在Cipher Suites中提供了所有可用的加密协议。

由于之前未建立过连接,携带length为0的Session id,表明期待一个SessionTicket

179,181报文:服务器端答复Server Hello,选定加密协议(本次抓包为ECDH),并传递自己的certificate给客户端。

以baidu为例:其证书中最重要的两部分内容就是公钥与数字签名。其中数字签名,即确保该certificate为真百度网站所提供的证书。公钥,则用于与百度网址进行RSA不对称算法的数据交互,生成可靠密钥。

180: 服务器端发送Server Key Exchange与Server Hello Done

Server Key Exchange发送了DH算法中的Kb值,并使用RSA签名方式进行了签名确保身份。(如果使用RSA则无此报文)。
Server Hello Done则表明Server端的报文已结束。

至此,Server已经提供了证书、公钥、Kb,并发送Hello Done进行确认。如果Server端需要验证Client端的身份,则需在发送Hello Done前发起Certificate Request,Client端就会类似Server端一样,发送证书以及Client公钥(一般Client端的证书与公钥主要通过U盾模式提供,用于安全要求较高的网银等场景)。

184:客户端答复Client key Exchange,Change Cipher Spec Protocol,Finished

Client Exchange即DH算法中的Kb(由于不验证Client端身份,所以Client不需要传递Signature)。
Change Cipher Spec代表Client已经完成了全部协商,接下来的数据包将使用TLS进行封装传输。
Finished:最后发送finish报文表示结束。

------至此双方已经交互了所有的DH算法所需的参数,均可计算得出对称密钥s。------

187:服务器端答复New Session Ticket,Change Cipher Spec Protocol,Finished

Session Ticket用于TLS中断后重新接续Session

Change Cipher Spec 代表Server端告知Client接下来的报文将使用TLS加密进行传输

Finished表示TLS连接建立过程结束

四、HTTPS报文传输

在发送Change Cipher Spec与Finished报文后,客户端即向服务器端发送加密的HTTP over TLS 报文;
服务器端在发送Change Cipher Spec与Finished报文后,同样使用HTTP over TLS应答HTTP 200 OK报文。

使用前述抓包方法可以在wireshark中解开加密的字符串,看到其中的密文:HTTP 200 OK响应报文

注:wireshark用于解密HTTPS报文的本地key,应该是指本地生成的随机数(RSA中的premaster随机数或DH中的a随机数),而非RSA公钥/私钥

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多