lsekfe 发表于 2022-10-12 10:45:00

使用Fiddler抓取https数据报文和数字证书的那些事!

一、HTTPS握手公钥私钥非对称加密解密原理以及数字证书由来
  (1) HTTPS协议=HTTP协议+SSL协议,默认端口:443。
  (2) HTTP协议(HyperText Transfer Protocol):超文本传输协议。默认端口:80,其中包含请求和响应两部分,其中请求包含:请求行、请求头、请求正文,响应包含:响应行、响应头、响应正文。
  (3) SSL协议(Secure Socket Layer) 安全套接层:为NetScape所研发,用以保障在Internet上数据传输的安全,利用数据加密技术,封装各种高层协议(如:http协议),具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。可确保数据在网络上的传输过程中不会被截取及窃听。
  (4) 加密和认证:加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容。而身份认证是用来判断某个身份的真实性,其重点在于确认用户的真实性。两者的侧重点是不同的。加密和认证是通过RSA加密算法来实现的。
  (5)RSA加密算法:RSA加密算法是1977年由(美国麻省理工学院)研发的。此算法中加密和认证都是通过一对密钥(公钥和私钥)来实现的,它是目前最有影响力的秘钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为秘钥数据加密标准。
  (6) 公钥和私钥:(公钥私钥加密解密方式为非对称加密方式)在现代密码体制中,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
  公钥私钥的原则:
  1.公开的密钥叫公钥,只有自己知道的叫私钥
  2.用公钥加密的数据只有对应的私钥可以解密
  3.用私钥加密的数据只有对应的公钥可以解密
  4.如果可以用公钥解密,则必然是对应的私钥加的密
  5.如果可以用私钥解密,则必然是对应的公钥加的密
  6.公钥和私钥是相对的,两者本身并没有规定哪一个必须是公钥或私钥。
  身份认证过程如下:
  身份认证和加密不同,只要身份认证,鉴别用户真伪。
  只要鉴别用户的私钥是正确的,就可以鉴别身份真伪
  A和B两个用户,A想让B知道自己是真实的A,不是假冒的,因此身份认证过程:
  1.A用自己的私钥对文件加密,从而对文件签名,并将签名文件发送给B
  2.B用A的公钥解密文件,从而验证签名,完成身份认证过程
  再是文件加密解密过程:同上(需完成两次验证)
  总结
  根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。
  数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。  
  可以这样说,数字证书就是经过CA认证过的公钥,而私钥一般情况都是由证书持有者在自己本地生成的,由证书持有者自己负责保管。具体使用时,签名操作是发送方用私钥进行签名,接受方用发送方证书来验证签名;加密操作则是用接受方的证书进行加密,接受方用自己的私钥进行解密。
  二、浏览器访问基于https协议的网址过程如下(以百度为例):
  1、用户在浏览器输入www.baidu.com,浏览器首先查找浏览器缓存,如果存在百度的缓存直接返回结果如果不存在,查找主机中的hosts文件,如果存在百度的信息,主机直接进行访问,如果不存在,查找本机首选的DNS缓存服务器中是否存在有百度缓存,如果存在,返回给主机,主机访问百如果不存,DNS缓存服务器会去查找根域,根域不存在百度的具体地址,但会返回com.的一级域名地址然后,DNS缓存服务器会去查找.com,一级域名解析服务器中,存在baidu.com的信息返回。
  2、DNS缓存服务器再去查找http://baidu.com的解析服务器,发现存在www的记录,将www的具体IP地址返回给DNS缓存服务器。
  3、DNS缓存服务器将信息缓存下来,并将信息返回该主机,主机接收到具体地址后,去访问百度的服务器。

4、首先主机会产生一个随机端口(1000-65635之间),和服务器的80端口建立连接(TCP的三次握手)。
  5、客户机会发送请求连接的报文,其中SYN=1,seq=x。 客户机期待的序列号为x+1,同步已发送状态。
  6、服务器开始处于监听状态,服务器接收到客户机的请求报文,确认与客户机连接ACK=1,确认报文序号ack=x+1,服务器再请求与客户机建立连接SYN=1,seq=y,发送客户机,此时服务器属于同步已接收状态。
  7、客户机收到服务器的报文,查看期待序列号是x+1服务端已经确认ACK=1,然后发现服务端的连接请求,确认与服务端建立连接,ACK=1确认序号为ack=y+1,发送给服务端。
  8、服务端接收后与客户端建立连接,此时两端都处于已建立连接状态。
  9、确认连接之后,客户机向服务器发送http请求。
  10、服务器返回客户机的http请求的内容。
  11、客户机接收到内容经浏览器显示给用户。


12、当客户机关闭浏览的网页时(TCP的四次挥手)。
  13、 客户机向服务器发送断开连接请求ACK=1,FIN=1seq=u期待的确认序号为u+1,此时客户机处于终止等待1状态。
  14、服务器收到客户机的请求,发送确认关闭的报文ACK=1ack=u+1seq=v,此时服务器处于等待关闭状态。
  15、客户机收到后,处于终止等待2状态。
  16、 服务器向客户机发送断开连接报文FIN=1ACK=1ack=u+1seq=w,此时服务器处于最后确认状态。
  17 客户端接收到服务器请求后,发送确认报文ACK=1,seq=u+1,ack=w+1,此时客户机处于等待时间状态,等待最后两个最长报文时间。
  18、服务器接收后立即关闭。
  19、 客户机等待时间过后,关闭,两者都进入关闭连接状态。
  三、Fiddler截获https请求实战。(所有证书问题100%成功的解决方案)
  (1) 清理环境(首次安装Fiddler不需要清理)
  1、卸载Fiddler软件以及根证书生成器Fiddler2 CertMaker。
  2、清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有的RSA算法文件,此算法文件和非对称公钥密钥加密相关。
  3、清除电脑上的根证书,WIN+R快捷键,输入: certmgr.msc, 然后回车,查找所有fiddler证书,然后删除。
  4.清除浏览器上的证书文件 ,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/,进入[高级]->[管理证书],有"受信任的根证书颁发机构"列表。此处需要仔细查找带有DO_NOT_TRUST_FiddlerRoot的字样,并删除。
  (2) 安装并配置Fiddler抓取Https数据报文。
  1.下载并安装fiddler,官网下载地址:https://www.telerik.com/download/fiddler
  2.下载并安装Fiddler证书生成器,官网下载地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
  3. 配置 Connecttions 如下图 选中 Tools —> Options —> Connecttions。


配置 Https 如下图所示:

因为要抓取https的数据 所以还需要生成证书,一路点击确认 Actions —> Trust Root Certificate :

导出证书到桌面, Actions —> Export Root certificate to Desktop,这时就可以看到桌面生成的证书了,这个证书是可以安装到系统或者浏览器的证书列表里抓取桌面软件或者网页https数据包的。



页: [1]
查看完整版本: 使用Fiddler抓取https数据报文和数字证书的那些事!