【问题标题】:Relaying an HTTPS request with proxy on C#在 C# 上使用代理中继 HTTPS 请求
【发布时间】:2014-05-17 20:22:15
【问题描述】:

我已经在请求标头上构建了一个带有一些逻辑的代理。

我使用套接字。 甚至在任何连接发生之前,在我的代理中我解析标头,添加身份验证 并将请求转发到目标主机。

现在我偶然发现了以下问题:

  1. 我必须中继 https 请求
  2. 我不需要任何正文操作,我只需要以相同的方式修改标头,将 CONNECT 转发到目标,接收答案并返回源套接字。

问题:

代理端是否需要 CA? 是否需要使用 SSlStream 来转发和接收请求?

如果是这样,算法可能是什么?

【问题讨论】:

    标签: c# sockets ssl proxy sslstream


    【解决方案1】:

    SSL 握手发生在 CONNECT 请求及其响应之后。如果您只需要操作 CONNECT 请求,您可以简单地在对等方之间握手后转发数据,例如没有 SSL 拦截,这意味着没有 SSLStream 和 CA。但是,如果您需要在 HTTPS 连接(GET、POST...)中操作请求的 HTTP 标头,则必须进行 SSL 拦截(例如,使用您自己的代理 CA 和 SSLStream 进行中间人)。

    【讨论】:

    • 我只是给 cookie 添加值。
    • cookies 不会在 CONNECT 请求中发送,仅用于为 SSL 建立隧道。 cookie 在受 SSL 保护的 HTTP 请求中发送(使用 https 的原因之一是保护这些 cookie),因此您需要进行 SSL 检查。这意味着:使用所有客户端都必须信任的您自己的代理 CA,将 SSL 流分离到客户端和服务器,确保您正确处理所有信任问题(不容易,请参阅 youtube.com/watch?v=7TNdHzwTNdM)并且客户端证书将不行。对于 C 代码,请查看 squid 代理中的 SSL 碰撞。
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多