在代理和用户之间是否可以使用ssl加密的转发代理?

时间:2012-04-11 14:50:40

标签: apache http ssl https proxy

首先,我想说清楚我不是在谈论访问使用https提供的源服务器上的内容,这可以使用模块mod_proxy_connect来完成。

我想要的是客户端和代理之间的安全连接,当实际请求的源实际上由不安全的标准http服务器提供服务时。

我正在使用apache 2.2,并且如果可行,也希望用apache实现这一点。

我使用wireshark嗅了一些请求并注意到以下内容:

网址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 webserver,启用带有ssl引擎和证书的虚拟主机,不要将它绑定到任何主机名。

我认为应该让apache与ssl对话,但是证书的通用名称与在代理服务器ip地址的连接行中指定的主机不匹配。

我现在的标准是什么,如果可以,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

是的,当然,那就是HTTPS代理。

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

也可以使用HTTP CONNECT在与HTTPS代理的SSL连接“内部”建立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
       /-------\