FiddlerCoreAPI開發(二)截獲HTTPS流量


上一篇文章簡單簡單分析了fiddlercore自帶樣例的代碼,本篇文章進入主題,介紹如何使用fiddlercore截獲HTTPS流量。

當時學習完樣例代碼后,我覺得結合注釋來抓HTTPS的包應該也很簡單,結果按照注釋的提示修改了下代碼后,還是抓不到,反復嘗試了很多方法都沒有解決,在google上搜了搜有人說可能是證書的問題,但也沒有給出具體的解決辦法,所以只能自己慢慢摸索,終於找到了一種方法,在這里和大家分享一下。

既然有可能是證書出了問題,那么我們就自己生成個證書,翻了翻幫助文檔發現還真有這樣的函數,叫做createRootCert(),而且函數說明中寫道: “Create a self-signed certificate to use for HTTPS interception” ,看到這個說明我覺得我可能找對地方了,直接生成證書:

Fiddler.CertMaker.createRootCert();

利用GetRootCertificate()獲得上述證書:

X509Certificate2 oRootCert = Fiddler.CertMaker.GetRootCertificate();//Returns the Root certificate that Fiddler uses to generate per-site certificates used for HTTPS interception. 

然后把這個證書安裝到受信任的根證書頒發機構:

System.Security.Cryptography.X509Certificates.X509Store certStore = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.Root, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
try
{
    certStore.Add(oRootCert);
}
finally
{
    certStore.Close();
}

這個證書還要賦值給變量oDefaultClientCertificate(The default certificate used for client authentication)

Fiddler.FiddlerApplication.oDefaultClientCertificate = oRootCert;

至此,問題算是解決了,后面就是按部就班的做就可以了。

bBufferResponse這個屬性在BeforeRequest里設為true,可以修改響應內容:

Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
{
    oS.bBufferResponse = true;
};

BeforeResponse里面把會話存起來:

Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oSession)
{
    if (oSession.isHTTPS)
    {

            Monitor.Enter(oAllSessions);
            oAllSessions.Add(oSession);
            Monitor.Exit(oAllSessions);

    }
};

忽略服務器證書錯誤:

Fiddler.CONFIG.IgnoreServerCertErrors = true;

再往后正常的Startup()和CreateProxyEndpoint()就可以了,響應的內容都保存在oAllSessions里面了,想怎么處理就怎么處理吧,在此不多贅述了,懂的人都懂。

最后附一張上某寶截獲的內容:

注意

1.如果是火狐瀏覽器的話,還需要把證書導入到瀏覽器中。

2.別忘了Shutdown(),不然瀏覽器就上不了網了,上不了的話去瀏覽器設置里面把代理去掉就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM