如何使用别名在 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
。
请注意,如果您有像<VirtualHost _default_:443>
这样的默认ssl,那么您可能需要在其中添加ServerName whatever
。是的,它实际上可以是whatever
。如果某些 VH 中没有添加服务器名称,您会得到奇怪的结果。以上是关于如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章
Apache 2 中的虚拟主机上是不是可以有多个密钥/证书?