使用 ProxyPass HTTPS 连接到其他服务器

使用 ProxyPass HTTPS 连接到其他服务器

我有一台具有公网 IP 的服务器。Apache (2.4) 应该代理(DNS 别名为)frontend.example.com的流量。service1.example.comfrontend.example.com

service1.example.com192.168.56.0是两者之间的私有局域网 ( ) 上的虚拟机。

现在,这对于 HTTP 来说很容易:

<VirtualHost *:80>
        ServerName service1.example.com

        ProxyPass / http://192.168.56.2/
        ProxyPassReverse / http://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost>

我正在尝试对 HTTPS 做同样的事情:

<VirtualHost *:443>
        ServerName service1.example.com

        SSLEngine On
        SSLProxyEngine On
        ProxyRequests Off
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerExpire off
        SSLInsecureRenegotiation on
        SSLProxyVerify none
        SSLVerifyClient none
        SSLCertificateFile /etc/ssl/certs/example_com.crt
        SSLCertificateKeyFile /etc/ssl/certs/example_com.key

        ProxyPass / https://192.168.56.2/
        ProxyPassReverse / https://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost>

尝试service1.example.com通过 HTTPS 访问返回:与远程服务器 SSL 握手期间出错

我在这里并不关心安全。service1 需要HTTPS 连接到其某些服务,这就是为什么我不只是将 HTTPS 代理到 HTTP。我不想frontend.example.com参与 SSL。我希望它说“嘿,我在 443 上有连接,我不处理它,我只是将它转发到这个内部 IP,它会处理它”。我只希望它传递请求。可以做到吗?

正如您在上面的 HTTPS 配置中看到的,我尝试尽可能地放松安全性(例如,SSLInsecureRenegotiation on应该降低针对中间人攻击的壁垒,不是吗?)。但到目前为止,什么也没起作用。

答案1

显然我唯一遗漏的指令是SSLProxyCheckPeerName off。现在它可以工作了。

相关内容