这就是问题所在。
我有一个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;
但不是请求的页面。
答案 0 :(得分:0)
虽然目标主机名可能在TLS握手中显示为SNI扩展,或者通过分析服务器返回的证书,URL的路径组件仅包含在HTTP请求中。由于此HTTP请求仅在TLS握手之后完成,因此请求已加密,如果不解密请求,则无法进入完整路径。这意味着如果没有SSL man,则无法阻止对特定路径的访问,因此需要中间人所拥有的目标站点的证书并且客户端信任该证书。
对于CONNECT请求也不是这样,因为这些请求仅包含目标主机名,但路径组件仅包含在CONNECT创建的隧道内发送的加密HTTP请求中。