如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?

Posted

技术标签:

【中文标题】如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?【英文标题】:How to configure multiple SSL certs on Apache virtual host with aliases? 【发布时间】:2017-06-18 04:48:31 【问题描述】:

我有一个使用相同代码在多个国家/地区域上运行的网络应用程序。 Apache 配置了别名。除了配置单个 SSL-certs 之外,这是可行的:

    ServerAlias *.server-at
    ServerAlias *.server-ch
    ServerAlias *.server-es

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/rex.server-de.crt
    SSLCertificateKeyFile /etc/ssl/private/rex.server-de.key

apache2 是否可以在虚拟主机容器内配置多个 SSL 证书?

【问题讨论】:

【参考方案1】:

您可以使用虚拟主机轻松配置各个证书,以通过ServerName 区分每个域的请求。例如

listen 443

<VirtualHost *:443>
    ServerName rex.server.de:443
    SSLEngine on
    SSLCertificateFile " /etc/ssl/certs/rex.server-de.crt"
    SSLCertificateKeyFile " /etc/ssl/certs/rex.server-de.key"
</VirtualHost>

<VirtualHost *:443>
    ServerName rex.server.at:443
    SSLEngine on
    SSLCertificateFile " /etc/ssl/certs/rex.server-at.crt"
    SSLCertificateKeyFile " /etc/ssl/certs/rex.server-at.key"
</VirtualHost> 

【讨论】:

是的,这是可能的。但是,有几个配置选项需要复制。我正在寻找一个更“优雅”的解决方案,我可以添加数十个别名而不是数十个 VH。 证书的主机名必须与服务器的 ServerName 匹配。使用别名服务与配置的证书主机名不匹配的请求将被浏览器拒绝。每个虚拟主机可以配置一个证书,并且不能使用通配符,因为你的域后缀不同,所以恐怕你需要每个域配置一个虚拟主机 对于 OP 来说可能为时已晚,但如果您有相同的选项需要放入多个 VH 中,您可以将它们放入一个包含文件并包含来自不同 VH 的相同包含文件。这样每个 VH 将有不同的 ServerNames 和证书,并且只有一个 Include 指令。 我一直在摆弄这个几天,这个工作!谢谢!对于来这里尝试为 RocketChat 设置加密的其他人:我的秘密是(1)删除ReverseProxyPass 行和(2)使用ServerName chat.example.com:443 请注意,如果您有像&lt;VirtualHost _default_:443&gt; 这样的默认ssl,那么您可能需要在其中添加ServerName whatever。是的,它实际上可以是whatever。如果某些 VH 中没有添加服务器名称,您会得到奇怪的结果。

以上是关于如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章

linux下一个网卡配置多个ip虚拟ip

虚拟IP---Linux下一个网卡配置多个IP

Apache 2 中的虚拟主机上是不是可以有多个密钥/证书?

为别名配置 Apache .conf [关闭]

使用 apache 虚拟主机使 Laravel 与多个其他 LAMP 项目共存

如何使用虚拟主机在 Apache 上运行多个项目?