【问题标题】:c# proxy ssl / tls passthrough without certificatec# proxy ssl / tls passthrough without certificate
【发布时间】:2016-10-13 23:18:18
【问题描述】:

这就是问题所在。

我有一个 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;

但不是请求的页面。

【问题讨论】:

    标签: c# ssl https proxy tls1.2


    【解决方案1】:

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

    对于 CONNECT 请求并非如此,因为这些请求仅包含目标主机名,但路径组件再次仅包含在 CONNECT 创建的隧道内发送的加密 HTTP 请求中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 2019-06-26
      • 2013-11-13
      • 1970-01-01
      • 2022-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      相关资源
      最近更新 更多