C#Web代理中的SSL;如何确定请求是否为SLL?

时间:2009-04-14 15:58:17

标签: c# sockets ssl proxy

我已经从头开始构建了一个Web代理(使用SocketNetworkStream类)。我现在正在尝试为它实现SSL支持,以便它可以处理HTTPS请求和响应。我很清楚我需要做什么(使用SslStream),但我不知道如何确定我从客户端获得的请求是否为SSL。

我已经在这个问题上搜索了几个小时,但一直找不到合适的解决方案。

我这样做之后:

TcpListener pServer = new TcpListener(localIP, port);
pServer.Start(256);
Socket a_socket = pServer.AcceptSocket();

我如何知道是否需要使用SslStreamNetworkStream阅读信息?

3 个答案:

答案 0 :(得分:3)

在此之后,客户端会向您发送 CONNECT 方法请求,您只需要重定向流量。

示例连接:

CONNECT www.google.com:443 HTTP/1.1

看到这之后只需切换到数据重定向模式。您无法拦截或读取数据,因此您无需担心SSLStream,也不会触摸它。

但是如果你想要MITM(中间的人)那么你需要切换到SSL,否则只需重定向任何到达目标的URL和端口,就是这样。

如果拦截请求,显然客户端浏览器会弹出SSL证书异常。

答案 1 :(得分:0)

您需要添加对CONNECT命令的支持。

http://www.codeproject.com/KB/IP/akashhttpproxy.aspx

答案 2 :(得分:-4)

这就是代理客户端为HTTP使用一个代理而对HTTPS使用不同代理的原因。您无法知道您将要接收的连接类型。