我正在使用一个拥有多个顶级域名的 WordPress 多站点网络。我们目前使用一个虚拟主机为它们提供服务:
<VirtualHost *:80>
ServerName example.com
ServerAlias *
DocumentRoot /var/www/html/example.com/public
</VirtualHost>
和让我们加密今年晚些时候,我们想向客户提供免费的 HTTPS。使用这项服务,我们可以自动为每个域获取证书。我希望能够配置 Apache 以在特定文件夹中查找证书,这样我们的自动化脚本在添加新证书时就不需要更改 Apache 配置。
<VirtualHost *:443>
DocumentRoot /var/www/html/example.com/public
ServerName example.com
ServerAlias *
SSLEngine on
# This line should find the cert that corresponds to the requested domain
SSLCertificateFile /etc/pki/tls/certs/*.crt
SSLCertificateKeyFile /etc/pki/tls/private/example_com.key
SSLCertificateChainFile /etc/pki/tls/certs/example_com.ca-bundle
</VirtualHost>
Apache 是否可以配置为针对请求的域选择正确的证书无需为每个虚拟主机单独设置虚拟主机或更改配置?
如果需要,我们可以切换 Apache 版本或安装知名的 Apache 模块。
答案1
我无法保证这种系统的安全性,因为它除了依赖于安全的 Apache 配置之外,还依赖于服务器和自动脚本的安全性的组合,但这并非不可能部署。
您确实需要使用服务器名称指示 (SNI) 配置单独的虚拟主机。您应该将默认虚拟主机设置为全部,并设置协议支持(目前,整个站点仅使用默认虚拟主机中设置的协议)。其他虚拟主机可以在单独的配置文件中设置,使用单独的私钥和证书,可能基于每个目录。如果您使用的是 Unix 服务器,您可能能够使用包含配置文件软链接的单个目录来帮助 Apache 找到它们。您需要特别注意文件权限和目录结构。