【问题标题】:TCP connection through a HTTPS proxy通过 HTTPS 代理的 TCP 连接
【发布时间】:2018-12-01 21:48:23
【问题描述】:

这是我想要实现的目标:我有一个 TCP 客户端需要连接到我们的服务器应用程序,但我需要通过 HTTPS 完成流量。据我所知,可以使用反向(或正向?)代理来完成,如下所示:

TCP client <--- HTTPS ---> myproxy.com:443 <------> tcp server app that listen port 7999

我使用以下虚拟主机配置成功创建了一个没有 SSL 的代理:

<VirtualHost *:80>
    ServerName myproxy.com
    SetEnv proxy-nokeepalive 1
    ProxyErrorOverride off
    ProxyRequests On
    ProxyBadHeader Ignore
    ProxyVia Full
    AllowCONNECT 80 443 7999
</VirtualHost>

(不确定这些参数是否是不必要的)

使用该虚拟主机,我可以像这样启动与服务器的 tcp 连接:

telnet myproxy.com 80

> Connected to myproxy.com.

CONNECT myproxy.com:7999 HTTP/1.1
Host: myproxy.com:7999

> HTTP/1.0 200 Connection Established
> Proxy-agent: Apache/2.4.18 (Ubuntu)

一旦我添加 SSL 并使用端口 443,我就无法再连接了:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName myproxy.com
    SetEnv proxy-nokeepalive 1
    ProxyErrorOverride off
    ProxyRequests On
    ProxyBadHeader Ignore
    ProxyVia Full
    AllowCONNECT 80 443 7999

    SSLProxyEngine On
    SSLEngine On
    SSLCertificateFile...
</VirtualHost>
</IfModule>

如果我尝试连接到这个虚拟主机,我会得到以下信息:

telnet myproxy.com 443

> Connected to myproxy.com.

CONNECT myproxy.com:7999 HTTP/1.1
Host: myproxy.com:7999

> Connection closed by foreign host.

我做错了什么,这只能通过使用端口 443 吗? 在键入此内容时,我尝试了启用 SSL 的端口 80(与我的上一个虚拟主机相同,但使用 &lt;VirtualHost *:80&gt;,它似乎工作。我与 TCP 服务器的连接是否以这种方式安全?我怎么能确定呢?

谢谢。

【问题讨论】:

    标签: https tcp proxy http-proxy http-tunneling


    【解决方案1】:

    您首先要做的是创建一个 HTTP 代理并向它发出一个普通的 CONNECT 请求。这按预期工作。

    然后您所做的是启用 SSL 以连接到此代理,但再次发出纯 CONNECT。由于您明确配置到代理的连接应该是 SSL 而不是普通的,因此这如预期的那样失败了。这意味着代理希望连接以 TLS 握手开始(即客户端发送的 ClientHello),而不是一些纯文本 HTTP 请求。

    如果您想使用 HTTPS 连接到代理,那么您不能使用简单的 telnet,因为 telnet 只使用普通 TCP。您需要改用支持 TLS 的客户端,例如 openssl s_client。然后你会得到类似的东西

    $ openssl s_client -connect myproxy:443
    CONNECTED
    ...
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : ...
    ---
    CONNECT myproxy:7999 HTTP/1.0
    
    HTTP/1.0 200 Connection established
    

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2019-09-25
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多