配置安全的SSL Apache代理

Fel*_*elk 5 apache ssl https proxy

我正在尝试使用apache建立代理安装程序,该安装程序始终完全支持SSL:

Client   <-->   Proxy @ somehostname.com   <-->   Server @ 123.45.67.89
Run Code Online (Sandbox Code Playgroud)

请注意,我的代理服务器具有主机名,但是远程服务器没有。客户端和代理之间的SSL设置可以与letencrypt设置一起正常工作。但是,我正在努力确保代理与远程服务器之间的连接安全。

因为远程服务器没有主机名,而且letencrypt并不只为IP颁发证书,所以我的想法是生成一个自签名证书,并将证书复制到代理中以仅信任该证书。不幸的是我不知道如何。

如果我只是禁用这些证书检查,则连接有效,因为代理仅信任每个证书:

SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
Run Code Online (Sandbox Code Playgroud)

虽然加密可以正常工作,但据我所知,真实性受到了损害,并且在握手期间我会遭受MitM攻击。这是不理想的。

相反,我已指示Apache信任我的自签名证书

SSLProxyCACertificateFile /path/to/cert.pem
Run Code Online (Sandbox Code Playgroud)

然后尝试强制使用有效的证书

SSLProxyVerify require
Run Code Online (Sandbox Code Playgroud)

但是,尽管我明确列出了证书,以及SSLProxyCACertificateFile说“这些用于远程服务器身份验证” 的文档,但它似乎并不信任它。

有没有一种方法可以确保代理服务器与远程服务器之间的连接是安全的,例如通过强制Apache始终使用该特定证书连接到代理服务器?

Fel*_*elk 5

事实证明,通过SSLProxyCACertificateFile不跳过名称检查来添加证书是很有意义的。因此,为了使自定义证书起作用,仍然需要将其颁发给正确的名称,或者以我的情况为IP。在我为该IP颁发了新证书之后,我的配置现在可以使用了。以下是相关部分:

<VirtualHost *:443>
    ServerName somehostname.com
    SSLProxyEngine On
    SSLProxyVerify require
    SSLProxyCACertificateFile /path/to/custom_cert.pem
    SSLProxyCheckPeerCN on  # or omit, default is on
    SSLProxyCheckPeerName on  # same
    ProxyPass / https://123.45.67.89/
    ProxyPassReverse / https://123.45.67.89/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)