c#proxy ssl / tls passthrough without certificate

时间:2016-10-13 23:18:18

标签: c# ssl https proxy tls1.2

这就是问题所在。

我有一个https请求。请求是作为SSL / TLS请求发送的(不是来自具有代理设置的浏览器的CONNECT ....)。

我需要在c#中编写一个阻止特定https://foo.com/foo.htm请求但通过https://foo.com/anything_else.htm的代理。

我可以用新证书等创建MITM攻击。

但我现在想知道是否有一种简单的方法可以做到这一点我没有使用MITM攻击,因为我不需要解密数据。我只需要知道URI /文件。

我可以轻松地传输流,但我想知道在读取URI和文件后是否有一种简单的方法来传输流。

我可以编写一些奇特的代码来拆分tcp请求,这就是我可能要做的事情。

在我走这条道路之前,任何人都有任何想法。请记住,没有CONNECT请求。只需直接使用SSL / TLS。

这样做的主要原因是它只是简化了创建自签名证书等的事情。

也许甚至可以从服务器端以某种方式使用真实证书,因为我不需要解密任何无头数据。

我发现c#的网络方面没有很好的记录,而且还有一点点。

仅供参考,我可以使用以下命令从TcpClient获取URI:

 IPEndPoint ipEndPoint = (IPEndPoint)clientTcpClient.Client.RemoteEndPoint;

 IPAddress ipAddress = ipEndPoint.Address;

 // Get the hostname.
 IPHostEntry ipHostEntry = Dns.GetHostEntry(ipAddress);
 String hostName = ipHostEntry.HostName;

 // Get the port.
 Int32 port = ipEndPoint.Port;

但不是请求的页面。

1 个答案:

答案 0 :(得分:0)

虽然目标主机名可能在TLS握手中显示为SNI扩展,或者通过分析服务器返回的证书,URL的路径组件仅包含在HTTP请求中。由于此HTTP请求仅在TLS握手之后完成,因此请求已加密,如果不解密请求,则无法进入完整路径。这意味着如果没有SSL man,则无法阻止对特定路径的访问,因此需要中间人所拥有的目标站点的证书并且客户端信任该证书。

对于CONNECT请求也不是这样,因为这些请求仅包含目标主机名,但路径组件仅包含在CONNECT创建的隧道内发送的加密HTTP请求中。