代理服务器和用户之间是否可以使用 SSL 加密的转发代理?

3
首先我想要澄清的是,我不是在谈论如何访问使用https传输的源服务器上的内容,这可以使用模块mod_proxy_connect来完成。
我希望实现的是,在请求的源服务器实际上由未加密的标准http服务器提供时,客户端与代理之间也能建立安全连接。
我正在使用apache 2.2,并且也希望能够使用apache实现这一点。
我使用wireshark嗅探了一些请求,并注意到以下内容:
常规url http://example.com/file 的http请求如下所示:
在与源服务器的连接上:
GET /file HTTP 1.1
Host: example.com

请注意,实际请求中的主机信息已被剥离,而是提供了主机头(可以在命名虚拟主机中在服务器端处理)。
当请求经过代理服务器时,它看起来略有不同:
在与代理服务器的连接上:
GET http://example.com/file HTTP 1.1
Host: example.com

请注意,请求行现在实际包含完整的URL,包括协议和主机名。主机头可能是多余的,但如果我正确理解RFC,它是HTTP 1.1所必需的。
因此,我考虑设置一个监听端口443的Apache Web服务器,启用带有SSL引擎和证书的虚拟主机,并将其绑定到任何主机名上。
我认为这样可以使Apache使用SSL进行通信,但是证书的通用名称将不匹配连接线中指定的代理服务器IP地址的主机。
我的要求是否符合当前标准,如果符合,如何实现?

这基本上是与几个小时前安全堆栈上的其他人提出的此问题相同的问题。 - Bruno
1个回答

2

当然,这就是HTTPS代理的作用。

客户端通过SSL连接到代理服务器,以文本形式向代理服务器发送命令。

还可以使用HTTP CONNECT在SSL连接内部建立与HTTPS代理的HTTPS连接,但并非所有客户端都支持此功能:

HTTPS connection over HTTPS proxy
client           proxy           server
ssl    \-------/   ssl
connect---------200 OK
ssl  \---------------------------/ ssl
data-------------------------------data
     /---------------------------\
       /-------\



HTTP connection over HTTPS proxy
client           proxy           server
ssl    \-------/   ssl
GET http://server/ ->
                       GET / 
                       Host: server ->
                       <---------OK, data
<--------------OK, data
       /-------\

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接