通过HTTPS代理的TCP连接

通过HTTPS代理的TCP连接,https,tcp,proxy,http-proxy,http-tunneling,Https,Tcp,Proxy,Http Proxy,Http Tunneling,以下是我试图实现的目标:我有一个TCP客户端,需要连接到我们的服务器应用程序,但我需要通过HTTPS完成通信。据我所知,可以使用反向(或正向?)代理完成,如下所示: TCP client <--- HTTPS ---> myproxy.com:443 <------> tcp server app that listen port 7999 一旦我添加SSL并使用端口443,我就无法再连接: <IfModule mod_ssl.c> <VirtualH

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

TCP client <--- HTTPS ---> myproxy.com:443 <------> tcp server app that listen port 7999
一旦我添加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>
我做错了什么,这只能通过使用端口443实现吗? 在键入此内容时,我尝试使用SSL打开的端口80(与上一个vhost相同,但使用
),它似乎可以工作。我与TCP服务器的连接是否以这种方式安全?我如何确定这一点


谢谢。

您首先做的是创建一个HTTP代理并向其发出一个普通连接请求。这正如预期的那样工作

然后,您所做的是为与此代理的连接启用SSL,但再次发出普通连接。由于您明确配置了与代理的连接应为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
<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.
$ 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