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

Posted

技术标签:

【中文标题】Apache 2 中的虚拟主机上是不是可以有多个密钥/证书?【英文标题】:Is it possible to have severals keys/certificates on a virtualhost in Apache 2?Apache 2 中的虚拟主机上是否可以有多个密钥/证书? 【发布时间】:2011-08-14 20:10:09 【问题描述】:

我想知道如何配置我的 Apache 2(版本 2.0.64)以使用多个密钥/证书对进行相互身份验证。

更准确地说,我已使用以下配置将我的 apache 配置为接受端口 443 上的 SSL 连接:

<VirtualHost _default_:443>
     SSLEngine on
     SSLCertificateFile certs/mycert.crt
     SSLCertificateKeyFile certs/mykey.key
     SSLCACertificateFile certs/ca.crt
     .....
</VirtualHost>

我有 2 个别名,比如说:

https://myserver/project1
https://myserver/project2

我想使用不同的密钥/证书对(而不是 mykey.key/mycert.crt)来验证连接到我的第二个 URL (https://myserver/project2) 的客户端。

我尝试使用 &lt;Location&gt;&lt;LocationMatch&gt; 指令,但这些指令似乎不支持 SSL 指令。

如何做到这一点?

【问题讨论】:

【参考方案1】:

TLS 中有一个名为Service Name Indication(又名SNI)的扩展。 TLS 客户端指明它所连接的服务器的名称;因此服务器能够选择正确的密钥和证书来使用。

根据SNI wikipedia page 的说法,Apache 2 模块 mod_ssl 和 mod_gnutls 似乎都支持此扩展以及众多 Web 客户端

此处提供 Apache 2 配置教程:http://en.gentoo-wiki.com/wiki/Apache2/SSL_and_Name_Based_Virtual_Hosts

【讨论】:

嗨,Jcs,感谢您的回复。实际上,我确实看到了该链接,但它并不真正符合我的需求。 因为我的 Apache 使用 mod_jk 将请求分派到 JAVA JEE 中的多个应用程序服务器。这样我就没有几个域名,而是别名。事实上,我希望每个项目都有某种配置,例如&lt;Location /project1&gt;SSLCertificateKeyfile .... SSLCertificateFile &lt;/Location&gt;。告诉我你是否还不清楚。谢谢。 您是否只有一个域名,但您想根据 URL 路径使用不同的服务器证书。我认为这是不可能的,因为在 TLS 握手完成之前,客户端不会发送 URL 路径。【参考方案2】:

在 apache2 中使用 SNI 的可能解决方案:

将 apache2 升级到 2.2.x 版 使用 apache2 编译/安装 gnutls

【讨论】:

以上是关于Apache 2 中的虚拟主机上是不是可以有多个密钥/证书?的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4 在同一端口上的多个虚拟主机

配置Apache虚拟主机,实现在一台服务器上运行多个网站

配置apache虚拟主机,实现在一台服务器上运行多个网站

sshd免密登陆

Apache构建虚拟Web主机

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