我从头开始构建了一个 Web 代理(使用 Socket
和 NetworkStream
类)。我现在正尝试为它实现 SSL 支持,以便它可以处理 HTTPS 请求和响应。我很清楚我需要做什么(使用 SslStream
),但我不知道如何确定我从客户端收到的请求是否是 SSL。
我已经就此主题搜索了几个小时,但一直找不到合适的解决方案。
在我这样做之后:
TcpListener pServer = new TcpListener(localIP, port);
pServer.Start(256);
Socket a_socket = pServer.AcceptSocket();
我如何知道我是否需要使用 SslStream
或 NetworkStream
读取信息?
最佳答案
此时客户端将向您发送一个CONNECT 方法请求,您只需重定向流量即可。
示例连接:
CONNECT www.google.com:443 HTTP/1.1
看到这个之后就切换到数据重定向模式。您无法拦截或读取数据,因此无论如何您都不必担心 SSLStream,您不会碰它。
但是,如果您想要 MITM(中间人),那么您需要切换到 SSL,否则只需重定向到达目标的任何内容 URL 和端口,仅此而已。
显然,如果您拦截请求,客户端浏览器将弹出一个 SSL 证书异常。
关于c# - C# Web 代理中的 SSL;如何确定请求是否为 SLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748258/