1. 程式人生 > >安卓微信連線fiddler等抓包工具無法抓取https

安卓微信連線fiddler等抓包工具無法抓取https

問題描述:

在手機連線pc的fiddler後,安卓微信打不開https頁面,安卓的瀏覽器、qq等都可以正常訪問https,ios也都可以,就只有安卓微信放問https是空白頁面

 

解決思路:

一. 證書沒有正確安裝

連線抓包工具無法訪問https的,首先判斷是證書問題。在瀏覽器訪問  10.0.0.99:8888  ,點選最下面的證書進行安裝

安裝好證書後,發現仍然訪問不了。

 

重新整理思路,安卓瀏覽器和qq等都可以正常訪問https說明證書配置是正確的。唯獨在微信訪問異常,在百度後查到有其他人遇到類似的問題,說是證書鏈不完整,導致瀏覽器無法信任你安裝的證書。

證書鏈其實就是描述證書的簽名環節,就比如是 A 頒發證書給 B ,B頒發證書給C,然後我們手裡的就是  證書C。當證書鏈不完整的情況下,也就是沒有描述我們手中的證書C是由誰辦法的,所以導致的瀏覽器不認為你這個證書是可信的授權證書。

二. 如何驗證證書鏈是否完整?

1.  如果是外網,可以訪問 https://www.geocerts.com/ssl-checker ,輸入域名進行驗證SSL證書鏈是否完整

 

2. 如果是內網,則可以使用命令驗證:

openssl s_client -connect    x.x.x.x:443

// s_client為一個SSL/TLS客戶端程式,與s_server對應,它不僅能與s_server進行通訊,也能與任何使用ssl協議的其他服務程式進行通訊。
// -connect host:port:設定伺服器地址和埠號。如果沒有設定,則預設為本地主機以及埠號4433。

 連線內網的IP後:

 

其中0、1是證書鏈中每一級證書的序號。0是要被驗證的網站所用的證書。其CN對應網站域名。

每一個序號後面,s 開頭的一行是指證書,i 開頭的一行是指此證書由誰簽發。

0 的CN包含一個英文域名 static.xxx.com 。它的簽發者是 TrustAsia Technologies, Inc./OU=Symantec Trust Network/OU=Domain Validated SSL/CN=TrustAsia DV SSL CA

 

1 的證書就是0的簽發者。而1自己又是由另一個證書  VeriSign Class 3 Public Primary Certification Authority  簽發的。

 

所以這麼一級級看下來,瀏覽器認為,1的簽發者我認識,安裝包裡有提到,VeriSIign嘛。簽名正確、驗證無誤,所以信任1。那麼也應該信任1簽發的0。所以這個網站可以信任。

然而,如果網站配置時,在crt檔案中只包含了自己,而沒包含一個完整到可以被瀏覽器內建資料驗證的證書鏈,就有可能被瀏覽器拒絕。比如

openssl s_client -connecttouko.moe:443 

---

Certificate chain

 0 s:/CN=touko.moe

   i:/C=CN/O=WoSign CALimited/CN=WoSign CA Free SSL CertificateG2

---

只有0一組。說明s行中的touko.moe由 i 行中的WoSign CA Free SSL CertificateG2簽發。沒了。

 

這就是此坑最神奇之處:瀏覽器此時是否驗證失敗,是不一定的。有2種情況:

A、瀏覽器自安裝以來,從未見過這個i。那麼驗證會失敗。

B、瀏覽器以前見過、並且驗證過i,那麼驗證會成功。

 

通常管理員自己會去證書發行商的https網站買證書,瀏覽器就會驗證,然後將驗證成功的中間證書全都快取下來,為以後節省時間。當管理員(錯誤地)配置完自己的網站,去瀏覽測試的時候,完全不會遇到問題。因為他的瀏覽器已經認識這個中間證書了。

總結:

通過證書鏈驗證發現,我們內網的證書鏈是完整無誤的。

 

三. 微信自己的問題

再次整理思路,用安卓微信訪問其他的https網站比如百度、csdn等都是空白頁,如果是我們的證書鏈問題,那其他網站的證書鏈是應該沒問題的,為什麼也訪問不了?所以證書鏈問題完全排除掉。

那既然不是本地證書問題,也不是我們服務端證書鏈問題,qq、瀏覽器又都能正常訪問,ios也正常,說明fiddler端是沒問題的,這個時候懷疑是不是微信自己的問題?

OK,那首先考慮為什麼fiddler可以抓取https的包呢?

fiddler巧妙就巧妙在偽造CA證書的地方了,我(fiddler)自己編造一個私鑰和公鑰,作為簽名憑證傳送給瀏覽器,提交到服務端,服務端根據公鑰簽名返回,我(fiddler)偽造的金鑰,自然就能解開了。

所以,你知道,我知道,大家都知道,為了防止軟體被fiddler抓包,開發者會內建SSL證書,直接通過自己的證書籤名加密,而不去採用系統的CA證書,這樣就不會被偽造的證書來騙取資訊,自然而然,fiddler就沒辦法抓到這些自帶證書的軟體資料了。

而微信極有可能自帶https證書驗證,沒有使用所以fiddler沒辦法抓到微信內https網頁的資訊。

 

而之前的微信是可以正常抓取https的,今天卻突然不行,想到前兩天微信剛剛升級到了7.0,會不會是新版新增的限制呢?

於是找來安卓6.7.3的微信進行驗證,發現時正常的,只有最新版7.0不行。

 

經過上面一系列的驗證,大概可以猜測,是因為安卓的微信7.0版本值信任自己內建的ssl證書,不信任使用者自己安裝的證書,導致抓包工具抓取https頁面時,訪問空白!

 

解決方案:

在官方沒出來新的除錯工具和方法之前,使用http或者低版本微信進行除錯

 

-----------------------------------------

參考文章:

https://www.dadiaoge.com/fiddler-wechat-https.html

https://blog.csdn.net/u014145985/article/details/80997023

https://blog.csdn.net/qq_24033949/article/details/52891146