通过反向代理向内部HTTPS站点提供HTTP访问

我正在尝试为内部HTTPS服务器设置一个HTTP反向代理。 作为一个旁注,是的,我知道我抛弃了所有的安全。 原来的HTTPS服务器本质上对我们来说并不敏感,运行它的产品不允许以任何方式closuresHTTPS或重新configurationembedded式Web服务器。

我尝试过使用Nginx,但是大多数人似乎都在使用Apache,所以这就是我现在正在尝试的。

这是我目前的虚拟主机configuration:

<VirtualHost 0.0.0.0:10443> ServerName server.domain.com SSLProxyEngine on #UnknownSSLDirectives #SSLProxyMachineCertificateFile /etc/apache2/selfsignedcert.pem SSLProxyCACertificateFile /etc/apache2/selfsignedcert.pem ProxyRequests Off ProxyPass / https://internalserver.internaldomain.com:2941/ ProxyPassReverse / https://internalserver.internaldomain.com:2941/ <Proxy> Order Deny,Allow Allow from all </Proxy> RequestHeader unset Authorization ErrorLog /var/log/apache2/internalserver-error.log CustomLog /var/log/apache2/internalserver-access.log common </VirtualHost> 

当我尝试打开http://server.domain.com:10443/时出现错误“401 Unauthorized”。

在其他的ServerFault问题中,我看到了对UnknownSSLDirectives的引用,但是Apache抱怨这个选项不存在。 而使用SSLProxyMachineCertificateFile而不是SSLProxyCACertificateFile,但是Apache抱怨在这种情况下SSL设置是不完整的。

我很困难。 我怎样才能debugging或取得进展? 谢谢!

我没有答案,但是这里有一些关于debugging问题的build议。

我想尝试在客户端模式下使用stunnel进行“反向SSL终止”( http://www.thegoldfish.org/2010/01/stunnel-in-client-mode/ ),然后尝试是否可以连接到http直接通过一个高端口的stunnel(通过curl / lynx /通过ssh隧道高端口)。 在这一刻,我只处理SSL客户端,而不是与Apache的代理设置。

当我得到这个工作,我会尝试在Apache中设置简单的未encryption的http代理到stunnel端口。 我解密部分工作,和Apache中的未encryption的http代理是一个已知的和有据可查的设置。 此外,我可以使用嗅探器(如tcpdump)来监听Apache和未encryption的stunnel套接字之间的通信。

只有在这个工作之后,我才会尝试找出如何去除stunnel中间人,并让Apache自己说话https。

附注:如果后端服务在cookie上设置了安全标志,并且浏览器认为它在未encryption的http上,我期望有一些validation问题。 其他一些标题和redirect也可能会产生问题。 无论如何,在使用浏览器之前用curl -vdebugging服务,并使用Web检查器(如Firebug)检查请求/响应头和cookie。