如何设置反向代理,以便对需要证书的内部 HTTPS 服务器进行基本身份验证的 HTTP 访问

如何设置反向代理,以便对需要证书的内部 HTTPS 服务器进行基本身份验证的 HTTP 访问

我们有一个需要基于 x509 的身份验证的内部服务器,但我被要求使用基本用户/密码身份验证来打开它。

我一直在尝试在 apache 中设置使用受信任证书连接到内部服务器的反向代理,但我似乎无法选择和使用该证书。基本身份验证工作正常。

浏览这里所有相关问题并在谷歌上搜索了几天后,我确信我需要使用一些 SSLProxy* 指令,但到目前为止我尝试的所有方法都没有成功。

顺便说一句,我在内部服务器中使用自签名证书进行身份验证。

到目前为止,我的 .conf 文件如下所示

<VirtualHost *:80>
    ServerName external.server

    SSLProxyEngine on
    UnknownSSLDirectives

    ProxyRequests Off
    ProxyPass        / https://internal.server/
    ProxypassReverse https://internal.server/ /

    <Location />
        AuthType Basic
        AuthName "Authenticated proxy"
        AuthUserFile /etc/httpd/passwd/passwords
        Require user USER
    </Location>

    <Proxy>
        Order Deny,Allow
        Allow from all
    </Proxy>

    RequestHeader unset Authorization

    ErrorLog "logs/proxy.error.log"
    CustomLog "logs/proxy.access.log" common
</VirtualHost>

我似乎已经很接近了,但却无法洞察 SSL 认证的本质。我希望有人能启发我。

答案1

SSLProxyMachineCertificateFile应该是您要找的;确保您已获得 PEM 格式的客户端证书(必须未加密,并且此文件中包含公钥和私钥 - -nodesopenssl 选项),并且设备应出示该证书以向上游服务器进行身份验证。

哦,还有一点不相关的:你的ProxyPassReverse的设置看起来是向后的;它们通常应该匹配ProxyPass。这不直观,但它用于动态修改上游服务器在标头中发送的绝对 URL 路径(它实际上不喜欢反向输入)。

相关内容