【问题标题】:How can I make my Windows C++/OpenSSL application proxy-aware?如何让我的 Windows C++/OpenSSL 应用程序代理感知?
【发布时间】:2020-05-15 09:27:53
【问题描述】:

我正在开发一个桌面 C++ 应用程序,它使用 OpenSSL 套接字(原始 TLS 套接字,不是 HTTPS)与我们的服务器通信。

我们的一个客户需要通过代理路由他们的流量。客户端在 Tunnel with Local Proxy 模式下使用 ZScaler。

理论上,可以重新配置 ZScaler 以强制我们的流量通过 ZScaler 选择的代理。但是,我想研究我们的应用程序使用 Windows 操作系统级别的代理设置而不是依赖 ZScaler 配置的解决方案。

我读过这篇文章: openssl s_client using a proxy

但我不确定这些答案是否适用于我的情况,因为该用户没有提及他们使用的是 Windows 还是 Linux,而且他们似乎在谈论 HTTP/HTTPS 代理。此外,这个问题似乎是在询问s_client 函数,而不是简单地通过 Windows 上的“带有本地代理的隧道”创建到我的服务器的 TLS 套接字。

所以,我的问题是:
可以使用 OpenSSL 通过带有本地代理的隧道打开 SSL 套接字吗?

我们能否进行操作系统调用以确定具有本地代理配置的隧道的 IP/套接字?

如果这是可能的,那么我还有另一个问题:假设我们在10.100.10.0:5000 有一个代理。

如果我们客户办公室的一个用户通过他们的代理打开一个到我们服务器的套接字,第二个用户是否会因为单个代理套接字的瓶颈而无法从他们的办公室连接? p>

换一种说法:使用 OpenSSL 为 Windows 应用程序实现代理感知的标准方法是什么?

注意:此问题最初发布到 Network Engineering stack exchange,但由于涉及 OSI 第 4 层以上的问题而被关闭。

注意:我正在寻找一种不需要在用户 PC 上需要管理员权限的解决方案。我希望我们的应用程序能够发现和使用操作系统级别的代理设置,而无需对机器进行任何管理更改,即调用netsh

【问题讨论】:

    标签: windows sockets proxy openssl


    【解决方案1】:

    可以使用 OpenSSL 通过带有本地代理的隧道打开 SSL 套接字到服务器吗?

    OpenSSL 不会为您执行此操作,但 OpenSSL 也不会阻止它。在与端点进行 TLS 握手之前,必须建立隧道。根据这是哪种代理,您可能需要为此使用HTTP CONNECT method,或者可能需要使用SOCKS protocol 或您的代理需要的任何代理。对于 ZScaler,这可能是 HTTP CONNECT 方法,但您需要确保安全策略实际上允许与目标 IP 和端口的连接。

    一旦您使用代理建立了到端点的隧道,您就可以在隧道的 TCP 套接字之上构建 SSL 套接字。只需进行通常的 SSL 设置(即SSL_new 等),然后使用SSL_set_fd 将 SSL 对象与现有套接字相关联。然后像往常一样进行握手,即SSL_connect 或类似名称。

    我们可以通过操作系统调用来确定具有本地代理配置的隧道的 IP/套接字吗?

    我不知道,但Winsock use system proxy settings 可能会回答这部分。

    如果我们客户办公室的一个用户通过他们的代理打开一个到我们服务器的套接字,第二个用户是否会因为单一代理套接字的瓶颈而无法从他们的办公室连接?

    这应该不是问题。通过代理有多个连接是完全正常的。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多