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

标签 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 读取信息?

最佳答案

此时客户端将向您发送一个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/

相关文章:

c# - C#的开发环境

c - Socket UDP 客户端内存泄漏

python-2.7 - Python - 将 TCP 套接字对象传递给多处理队列

ruby-on-rails - ActionMailer 和自签名的 SSL 证书

c# - ItemSource 设置为 UserControls 的 ObservableCollection 的 ItemsControl 无法在可视化树中呈现

c# - 使用 linq 合并 2 个具有重复键的字典

c# - 在 asp.Net 应用程序中调试 jquery

c - recvfrom 未收到取决于使用的 ai_family

go - 对特定主机使用 TLS/SSL 客户端身份验证

macos - 由于 SSL 证书问题,无法通过浏览器或控制台访问 Github