Apache2 代理 SSL 证书检查

Apache2 代理 SSL 证书检查

让我们拥有一个具有有效 TLS 证书的网络服务器,名为 b.my.tld。

我想在 a.my.tld 上配置 apache2 作为 b.my.tld 的反向代理。因此我添加了

ProxyPass / https://b.my.tld/
ProxyPassReverse / https://b.my.tld/

我的问题是:服务器 a 上的 apache2 无法连接到 b.my.tld,因为它需要 a.my.tld 的 TLS 证书,而不是 b 的。

是否有可能配置 apache2 以接受特定主机名的证书 - 或者 ProxyPass/ProxyPassReverse 中定义的主机名的证书?

答案1

如果您有https://b.my.tld/并且 apache 需要 a.my.tld,那是因为您可能ProxyPreserveHost on在其他地方使用了您未提及的内容。否则它将需要 b.my.tld 的证书。

无论如何,理想情况下,您反向代理的主机应该具有与其主机名匹配的证书(如今由于 Google 的特性,DNS 而不是 CN 条目应该足够了。)但是对于那些需要例外的情况,对于这种情况以及您使用的情况ProxyPreserveHost on,Apache HTTPD 可以忽略目标证书名称:

SSLProxyCheckPeerName off

答案2

要将 Apache2 配置为具有自己的 TLS 证书的其他域(在本例中为 b.my.tld)的反向代理,您需要使用指令SSLProxyEngine并专门为反向代理配置虚拟主机。操作方法如下:

  1. 确保proxyproxy_http模块在 Apache 中已启用:
sudo a2enmod proxy
sudo a2enmod proxy_http
  1. 为a.my.tld创建一个新的虚拟主机配置文件:
sudo nano /etc/apache2/sites-available/a.my.tld.conf
  1. 在虚拟主机配置文件中,设置反向代理并指定 TLS 设置:
<VirtualHost *:443>
    ServerName a.my.tld
    SSLEngine On
    SSLProxyEngine On
    SSLCertificateFile /path/to/a.my.tld.crt
    SSLCertificateKeyFile /path/to/a.my.tld.key
    
    ProxyPass / https://b.my.tld/
    ProxyPassReverse / https://b.my.tld/
</VirtualHost>

确保将/path/to/a.my.tld.crt和替换/path/to/a.my.tld.key为 a.my.tld 的 SSL 证书和私钥文件的实际路径。

  1. 启用新的虚拟主机并重新加载 Apache:
sudo a2ensite a.my.tld.conf
sudo systemctl reload apache2

现在,服务器 a 上的 Apache 将充当 b.my.tld 的反向代理,并在与 b.my.tld 通信时使用为 a.my.tld 指定的 SSL 证书。此配置允许您在反向代理级别处理 SSL 终止,同时安全地提供来自后端服务器 (b.my.tld) 的内容。

相关内容