如何在Apache上为vhost设置不同的SSL证书?

时间:2008-11-09 17:06:56

标签: apache ssl virtual-hosts

我有一个Web服务器,它提供不同的域名,但只分配了一个IP地址。这适用于Apache中的虚拟主机。现在我想要网站的SSL加密连接。如何为不同的虚拟主机设置不同的SSL证书?

对不同的主机名使用不同的IP将是一个解决方案 - 不是很优雅,但可能。但我想知道,我如何为不同的虚拟主机使用不同的SSL证书。所以我寻找一个只有一个IP地址的解决方案。

6 个答案:

答案 0 :(得分:8)

更新:2013

似乎SNI终于开始占据主导地位,因为旧的浏览器正在逐渐消失。以下是docs for Apache SNI,此处是wikipedia article on SNI,其中包含支持它的浏览器的图表。简而言之,所有主流浏览器都支持受支持的版本;如果支持旧浏览器很重要,您可能需要考虑这一点。

------上一个答案------------

SSL主机必须绑定到唯一的IP地址/端口组合,因此您无法使用虚拟主机(或者至少,每个IP地址只能有一个ssl主机)。这是因为https在http:中发送Host:参数之前开始加密,因此无法确定主机名中使用的密码 - 它只有IP地址。

如果HTTP有一个TLS命令,这很容易修复,所以它可以在询问主机名后启动SSL,但没人问我。

有关最终答案,请参阅http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

答案 1 :(得分:4)

在给出答案的提示和对它的评论后(特别是Martinv.Löwis),我做了一些谷歌搜索,发现this website about RFC 2817 and RFC 3546。 RFC 3546似乎是一个很好的解决方案。

答案 2 :(得分:2)

AFAIK使用mod_ssl无法为基于名称的虚拟主机设置不同的SSL证书。您可以阅读详细原因here。另一种方法是使用基于IP的虚拟主机(这可能不太可能/不是一个非常令人满意的解决方案) - 只需插入不同的SSLCertificateFile指令,或者您可以使用mod_gnutls尝试this方法。

答案 3 :(得分:1)

每个vhost都需要一个单独的IP:端口组合。

RFC 3546尚不可行。 IE在Vista下运行时只支持它,最后我检查Safari也没有管理它。

答案 4 :(得分:1)

虽然DGM提到的所有内容都是正确的,但已经尝试绕过每个证书(包括mod_gnutls和使用TLS extensions)的唯一IP地址的要求。有一些缺点,但它们可能是你可以接受的。

答案 5 :(得分:1)

最后有可能!您需要服务器和客户端都支持服务器名称指示(SNI)

浏览器,支持SNI:

  • Mozilla Firefox 2.0或更高版本
  • Opera 8.0或更高版本(启用了TLS 1.1)
  • Internet Explorer 7.0或更高版本(在Vista上,而不是XP)
  • Google Chrome
  • Mac OS X 10.5.6上的Safari 3.2.1

此文档显示了配置服务器的问题:SSL with Virtual Hosts Using SNI