2010-07-10 90 views
2

我已經做了一個簡單的代理使用HttpListener和HttpWebRequest/Response來編輯和記錄http頭。一切工作正常和HTTP,但HTTPS是一個不同的故事,我已閱讀MSDN和它說HttpListener & HttpWebRequest /響應工程通過HTTPS。很明顯,我做錯了什麼。.NET HttpListener/HttpWebRequest/HttpWebResponse和HTTPS

我有IE指向下面的前綴,我似乎無法趕上請求。

string[] prefixes = new string[] { "http://127.0.0.11:8080/", "https://127.0.0.12:8081/" }; 

HttpListener listener = new HttpListener(); 
// Add the prefixes. 
foreach (string s in prefixes) 
{ 
    _listener.Prefixes.Add(s); 
} 

示例歡迎,我是c#newb! :)

回答

2

https://不能像這樣代理。 HTTPS(如在RFC2818中)使用SSL/TLS來打開遍歷代理的安全隧道。作爲代理,您無權訪問HTTPS內容,因爲它只是一個不透明的二進制加密goop。

你期望的更像SHTTP(RFC2660),基本上沒有人使用它。

如果您想查看源自您計算機的HTTPS流量(例如,用於調試目的),您可以使用NetMon。但是,如果根據定義不可能對HTTPS執行操作,則代理可以檢查其他計算機上的所有流量,這意味着您剛剛成功實施了中間人攻擊。

0

根據你在找什麼,看看fiddler,這是一個廣泛使用的網頁調試代理。它處理HTTPS。

1

除了Cylon Cat說的外,還有FiddlerCore,這是Fiddler代理,但是可以在您自己的應用程序中使用。它支持HTTPS。

1

這實際上很容易處理.NET框架。如果你想要做的是寫一箇中間人代理,如提琴手。然後您可以使用SSLStream輕鬆完成。使用您的代理的客戶端會收到有關無效SSL證書的警告,但您仍然可以代理流量並檢查它。

這是一個非常實用的(包括緩存!)代理服務器,用於終止https而不是隧道(中間人)。 CodeProject:http://www.codeproject.com/KB/IP/HTTPSDebuggingProxy.aspx