fiddler抓取https數據報文-Fiddler抓取app包-Fiddler數字證書解決方案(泣血推薦,原創親測)

一、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.如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。

加密過程如下:

比如有兩個用戶A和B,B有一對公鑰和私鑰,A想把一封信件通過雙鑰加密的技術發送給B,那麼加密解密的過程如下:

1.B將他的公開密鑰傳送給A。

2.A用B的公開密鑰加密她的信件,然後傳送給B。

3.B用他的私人密鑰解密A發送的信件。

身份認證過程如下:

身份認證和加密不同,主要用於鑑別用戶的真僞。這裏我們只要能夠鑑別一個用戶的私鑰是正確的,就可以鑑別這個用戶的真僞。比如有兩個用戶A和B,B有一對公鑰和私鑰,整個身份認證的過程如下:

1.B用她的私鑰對信件加密(加密過程:先使用HASH算法形成信件摘要,然後使用私鑰加密信件摘要生成數字簽名)。

2.B將已進行數字簽名的信件傳送給A。

3.A用B的公鑰解密信件,從而驗證數字簽名(驗證過程:主要是先對源信件進行HASH運算,也產生一個摘要;A用新產生的摘要和原摘要對比,如果兩者相同,則可以證明信息簽名者的身份是B)。

總結:

公鑰和私鑰是成對的,它們互相解密。

公鑰加密,私鑰解密。

私鑰數字簽名,公鑰驗證身份。

(7) 數字證書由來:公鑰是公開的,是在網絡中任意傳輸的,太容易被竊取,不安全,所以需要找CA認證中心對公鑰加密。公鑰認證加密後就叫數字證書。數字證書包括:用戶基本信息及公鑰信息,部分還會附上認證中心簽名及有效期等。證書的格式和驗證方法普遍遵循X.509國際標準。目前數字證書廣泛的用於電子商務平臺購物、各大銀行轉賬、網銀支付等資金交易場景。

(8) CA(Certificate Authority):CA也擁有一個公鑰和私鑰,CA認證加密的過程其實也就是使用密鑰加密的過程,是受信任的權威的第三方電子商務證書頒發機構,是負責發放和管理數字證書的權威機構。

 

二、瀏覽器訪問基於https協議的網址過程如下(以百度爲例):

https協議握手過程使用非對稱加密方式傳輸(即公鑰私鑰加密方式),https通信過程使用對稱密鑰加密方式傳輸。(即信息的發送方和接收方用一個密鑰去加密和解密數據)

(1) 瀏覽器向百度發出https握手請求,百度將自己的SSL數字證書(由CA頒發,裏面包含了百度的公鑰、CA認證中心簽名及有效期等信息)進行返回。

(2) 瀏覽器接到百度的SSL數字證書後查看瀏覽器本身的"證書管理器"(谷歌瀏覽器輸入chrome://settings/進入),進入[高級]->[管理證書],有"受信任的根證書頒發機構"列表。瀏覽器會根據這張列表,查看解開數字證書的公鑰是否在列表之內。瀏覽器會自帶很多CA頒發的數字證書公鑰,如下圖:

(3) 瀏覽器找到對應的CA證書頒發的公鑰解密百度SSL數字證書,拿到百度的公鑰,如果證書解密過程有問題則發出警告提示:常見的警告提示如下:

瀏覽器證書異常提示:如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。

如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。

(4) 瀏覽器生成隨機的對稱祕鑰用取得的百度的公鑰加密後發送給百度服務器。

(5) 百度服務器用自己的私鑰解密得到對稱密鑰。

(6) 瀏覽器和百度服務器都知道了對稱密鑰,接下來則使用這個對稱密鑰加密和解密網頁明文進行數據傳輸。值得一提的是:此對稱密鑰並不是永久的。如果瀏覽器和服務器重新進行握手,那就會生成新的密鑰。keepalive可以在一定時間內重用對稱密鑰。

 

三、Fiddler截獲HTTPS協議數據以及數字證書加密解密原理。

(1) 瀏覽器向百度發出https握手請求,被Fiddler截獲,變成fidller向百度發出握手請求,百度將自己的SSL證書(由CA頒發,裏面包含了百度的公鑰以及認證中心簽名及有效期等信息)進行返回,SSH數字證書被Fiddler截獲,Fiddler用CA的公鑰解開百度的證書,拿到百度公鑰。

(2) Fiddler修改SSL證書相關信息(把:把百度的公鑰替換成自己的公鑰,把百度證書頒發機構修改成自己頒發等),以達到冒充百度的目的,然後用自己的私鑰重新加密百度的SSL數字證書發送給瀏覽器。

(3) 由Fiddler的根證書生成器FiddlerCertMaker.exe生成Fiddler的根證書並加入瀏覽器"受信任的根證書頒發機構"列表,所以瀏覽器可以用Fiddler根證書中的公鑰解密僞造的百度SSL數字證書。得到冒充的百度公鑰(實際是Fiddler的公鑰)。

(4) 瀏覽器生成隨機對稱祕鑰,用冒充的百度公鑰(實際是Fidller的公鑰)加密後發出,被Fiddler截獲,Fiddler用自己私鑰解開帶有隨機對稱密鑰的密文,獲得通訊的對稱祕鑰。Fiddler用百度的公鑰加密對稱祕鑰,然後傳給百度。

(5) 百度用自己私鑰解開對稱祕鑰,這樣雙方就能使用對稱祕鑰加密傳輸了。

(6) Fiddler收到百度發來的網頁密文,由於Fiddler也保存了對稱祕鑰,所以它可以解開密文,這樣我們就能使用Fiddler看到加密的https的明文了,然後Fiddler再次用對稱祕鑰加密發送給瀏覽器。瀏覽器向百度發送密文時也被Fiddler截獲,截獲後使用對稱祕鑰解密並顯示在Fiddler,然後Fiddler使用對稱密鑰加密後再發送給百度。如此循環往復。

 

四、Fiddler截獲https請求實戰。(所有證書問題100%成功的解決方案)

前言:理解https協議加密解密原理之後,以下操作能100%的解決fiddler所有證書問題。

(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. 打開Fiddler,點擊菜單欄中的Tools—>Options,選擇HTTPS頁籤。勾選Decrypt HTTPS CONNECTs(解密https連接),Fiddler證書生成器會自動判斷本機是否安裝Fiddler證書,沒有則彈出如下證書安裝頁面。點擊」Yes」按鈕,在新彈出的窗口中再點擊」確定」後則Fiddler證書安裝完成。接下來Fiddler就可以抓取Https的數據報文。

(3) Fiddler抓取手機端的https協議數據報文。

1、打開Fiddler,點擊菜單欄中的Tools—>Options,選擇Connections頁籤。勾選Allow remote computers connnect(允許外部電腦連接)。

2、保持android手機和電腦在同一網段。如連接同一無線。

3、打開android手機的「設置」->「WLAN」,找到你要連接的無線網絡並點擊,彈出網絡設置對話框,在「代理」處選擇「手動」,在「主機名」輸入框後面輸入127.0.0.1,在「端口」輸入框後面輸入8888,然後點擊「保存」按鈕。

4、啓動android設備中的瀏覽器訪問百度首頁或打開被測App,在fiddler中可以看到抓取到的數據報文了。

 

獨行踽近,衆行致遠!歡迎點擊鏈接加入羣聊【碼尚軟件測試技術貳羣:603401995】:https://jq.qq.com/?_wv=1027&k=lyvxsojE  各種軟件測試技術,自動化框架,單元測試框架,數據驅動框架,持續集成jenkins應有盡有!
作者:測試已入魔
出處:https://blog.csdn.net/weixin_48500307 歡迎轉載,但未經作者同意請保留此段聲明,並在文章頁面明顯位置給出原文鏈接。