我有一个Web服务器,它提供不同的域名,但只分配了一个IP地址。这适用于Apache中的虚拟主机。现在我想要网站的SSL加密连接。如何为不同的虚拟主机设置不同的SSL证书?
对不同的主机名使用不同的IP将是一个解决方案 - 不是很优雅,但可能。但我想知道,我如何为不同的虚拟主机使用不同的SSL证书。所以我寻找一个只有一个IP地址的解决方案。
答案 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:
此文档显示了配置服务器的问题:SSL with Virtual Hosts Using SNI