事情是这样的:
- 我们的客户端软件只能使用 http 协议连接,无法使用 https。
- 但是,安全要求规定了端到端的安全,因此我们在与服务器通信时需要使用 https。
- 现在我已经能够在测试环境中通过使用隧道采用以下配置:
stunnel.conf 文件:
[mylocalproxy]
client = yes
accept = 127.0.0.1:3000
connect = the.real.server:443
- 鉴于上述 stunnel 配置,我可以将我的测试客户端配置为使用端点地址
http://localhost:3000/endpoint/url/
,并且一切正常。 - 但在生产环境中,客户端无法通过网络直接访问真实服务器。客户端的 Http/s 流量必须经过代理服务器。
- 我的问题:
- 是否可以配置 stunnel 使用代理服务器连接?
- 如果无法使用 stunnel,还有其他方法可以实现吗?
答案1
它似乎得到了支持,但手册页但是该语言的编写方式使得你或多或少必须了解协议才能理解它:
在下面协议我们可以看到以下内容:
连接基于 RFC 2817 - 升级到 HTTP/1.1 中的 TLS,第 5.2 节 - 使用 CONNECT 请求隧道此协议仅在客户端模式下受支持。
进一步我们发现以下内容:
protocolHost = ADDRESS 协议协商的主机地址 对于“connect”协议协商,protocolHost 指定代理要连接的最终 TLS 服务器的 HOST:PORT。必须使用 connect 选项指定通过 stunnel 直接连接的代理服务器。
因此我们可以将其拼凑起来:
[mylocalproxy]
client = yes
accept = 127.0.0.1:3000
protocol = connect
connect = proxy.example.org:3128
protocolHost = the.real.server:443
我还没有测试过,但根据文档的措辞,它应该可以按预期运行。
答案2
你可以这样做:
[SSL Proxy]
accept = 8443
connect = 8084
cert = certificate.pem
key = private_key.pem
您将需要来自证书颁发机构的证书才能允许 https 客户端连接。