gpt4 book ai didi

没有证书的 c# 代理 ssl/tls 直通

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:40 25 4
gpt4 key购买 nike

这就是问题。

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

我需要用 C# 编写一个代理来阻止特定的 https://foo.com/foo.htm请求但允许通过 https://foo.com/anything_else.htm .

我可以用新证书等创建 MITM 攻击,这很好。

但我现在想知道是否有一种简单的方法可以在不使用 MITM 攻击的情况下执行此操作,因为我不需要解密数据。我只需要知道 URI/文件。

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

我可以编写一些花哨的代码来分离 tcp 请求,这就是我可能需要做的。

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

这样做的主要原因是它只是让事情变得更简单,而不是创建自签名证书等。

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

我发现 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;

但不是请求的页面。

最佳答案

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

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

关于没有证书的 c# 代理 ssl/tls 直通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com