2010-07-10 92 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