C# 在C上使用代理中继HTTPS请求#
我已经在请求头上构建了一个带有一些逻辑的代理 我使用插座。 在任何连接发生之前,在我的代理中我解析头,添加身份验证 并将请求转发到目标主机 现在我偶然发现了以下问题:C# 在C上使用代理中继HTTPS请求#,c#,sockets,ssl,proxy,sslstream,C#,Sockets,Ssl,Proxy,Sslstream,我已经在请求头上构建了一个带有一些逻辑的代理 我使用插座。 在任何连接发生之前,在我的代理中我解析头,添加身份验证 并将请求转发到目标主机 现在我偶然发现了以下问题: 我必须转发https请求 我不需要任何身体操作,我只需要以同样的方式修改头部,前向连接到目标,接收答案并返回到源套接字 问题: 代理端是否需要CA? 我是否需要使用SSlStream转发和接收请求 如果是这样,算法可能是什么?SSL握手发生在连接请求及其响应之后。如果您只需要操纵连接请求,您只需在对等方之间握手后转发数据即可,例如
如果是这样,算法可能是什么?SSL握手发生在连接请求及其响应之后。如果您只需要操纵连接请求,您只需在对等方之间握手后转发数据即可,例如,无SSL拦截,这意味着无SSLStream和无CA。但是,如果您需要操纵HTTPS连接(GET、POST…)内请求的HTTP头,则必须执行SSL拦截(例如,中间人使用自己的代理CA和SSLStream)。我只是向cookies添加值。cookies不在CONNECT请求中发送,CONNECT请求仅用于为SSL建立隧道。cookies在HTTP请求中发送,HTTP请求受SSL保护(使用https的原因之一是保护这些cookies)因此,您需要SSL检查。这意味着:使用您自己的代理CA,它必须受到所有客户端的信任,将到客户端和到服务器的SSL流分开,确保所有信任问题都正确(不容易,请参阅),并且客户端证书将不起作用。对于C代码,请查看squid proxy中的SSL碰撞。