我已经从头开始构建了一个Web代理(使用Socket
和NetworkStream
类)。我现在正在尝试为它实现SSL支持,以便它可以处理HTTPS请求和响应。我很清楚我需要做什么(使用SslStream
),但我不知道如何确定我从客户端获得的请求是否为SSL。
我已经在这个问题上搜索了几个小时,但一直找不到合适的解决方案。
我这样做之后:
TcpListener pServer = new TcpListener(localIP, port);
pServer.Start(256);
Socket a_socket = pServer.AcceptSocket();
我如何知道是否需要使用SslStream
或NetworkStream
阅读信息?
答案 0 :(得分:3)
在此之后,客户端会向您发送 CONNECT 方法请求,您只需要重定向流量。
示例连接:
CONNECT www.google.com:443 HTTP/1.1
看到这之后只需切换到数据重定向模式。您无法拦截或读取数据,因此您无需担心SSLStream,也不会触摸它。
但是如果你想要MITM(中间的人)那么你需要切换到SSL,否则只需重定向任何到达目标的URL和端口,就是这样。
如果拦截请求,显然客户端浏览器会弹出SSL证书异常。
答案 1 :(得分:0)
您需要添加对CONNECT命令的支持。
答案 2 :(得分:-4)
这就是代理客户端为HTTP使用一个代理而对HTTPS使用不同代理的原因。您无法知道您将要接收的连接类型。