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

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

我正在尝试为内部 HTTPS 服务器设置 HTTP 反向代理。顺便说一句,是的,我知道我正在放弃所有安全性。原始 HTTPS 服务器对我们来说本质上并不敏感,并且运行它的产品不允许以任何方式关闭 HTTPS 或重新配置嵌入式 Web 服务器。

我曾尝试使用 Nginx,但大多数人似乎都在使用 Apache,所以我现在也尝试使用 Apache。

这是我当前的虚拟主机配置:

<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 未授权”。

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

我有点困惑。我该如何调试这个问题或者取得一些进展?谢谢!

答案1

截至 2018 年,不建议使用 Apache 或 stunnel 执行此任务。我建议使用 haproxy,因为它清晰度高、速度快。

至于 Apache 2.2,您在 上犯了错误<Proxy>。在反向代理场景中, 的访问ProxyPass由 block 控制<Location>,而不是由 控制<Proxy>

仅适用<Proxy>向前代理,然后你做一个撤销代理人。手册里有

答案2

我没有答案,但这里有一些调试问题的建议。

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

当我完成这项工作后,我会尝试在 Apache 中为 stunnel 端口设置普通的未加密 http 代理。我已使解密部分正常工作,并且 Apache 中的未加密 http 代理是一种已知且有据可查的设置。此外,我可以使用嗅探器(例如 tcpdump)来监听 Apache 和未加密的 stunnel 套接字之间的通信。

只有在这项工作完成后,我才会尝试弄清楚如何删除 stunnel 中间人并让 Apache 本身使用 https。

附注:如果后端服务在 cookie 上设置了安全标志,并且浏览器认为它处于未加密的 http 上,那么我预计身份验证会出现一些问题。其他一些标头和重定向也可能会产生问题。无论如何,在使用浏览器之前,请使用 curl -v 调试服务,并使用 Web 检查器(例如 Firebug)检查请求/响应标头和 cookie。

相关内容