.NET HttpListener / HttpWebRequest / HttpWebResponse和HTTPS

时间:2010-07-10 00:00:08

标签: c# httplistener

我使用HttpListener和HttpWebRequest / Response创建了一个简单的代理来编辑和记录http标头。一切都在HTTP上工作得很好,但是HTTPS是一个不同的故事,我已经阅读过MSDN,它说HttpListener& HttpWebRequest / Response通过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! :)

4 个答案:

答案 0 :(得分:2)

https://无法像这样代理。 HTTPS(如RFC2818中所述)使用SSL / TLS打开遍历代理的安全隧道。作为代理,您无权访问HTTPS内容,因为它只是一个不透明的二进制加密goop。

您所期望的更像SHTTP(RFC2660),基本上没有人使用。

如果要查看源自您计算机的HTTPS流量(例如,出于调试目的),您可以使用NetMon。但是,一个代理可以检查从其他机器通过它的所有流量,如果根据定义无法为HTTPS做,那就意味着你只是成功地进行了中间人攻击。

答案 1 :(得分:1)

除了Cylon Cat所说的,还有FiddlerCore,它是Fiddler代理,但是你可以在自己的应用程序中使用。它支持HTTPS。

答案 2 :(得分:1)

这实际上很容易使用.NET框架。如果您想要做的是写一个中间人代理,比如fiddler。然后,您可以使用SSLStream轻松完成。使用您的代理的客户端将收到有关无效SSL证书的警告,但您仍然可以代理流量并进行检查。

这是一个非常实用(包括缓存!)代理服务器,它执行https终止而不是隧道(中间人)。 CodeProject:http://www.codeproject.com/KB/IP/HTTPSDebuggingProxy.aspx

答案 3 :(得分:0)

根据您要查找的内容,请查看fiddler,这是一个广泛使用的Web调试代理。它确实处理HTTPS。