我有一个网络服务器,它提供不同的域名,但只分配了一个 IP 地址。这适用于 Apache 中的虚拟主机。现在我想要网站的 SSL 加密连接。如何为不同的虚拟主机设置不同的 SSL 证书?
为不同的主机名使用不同的 IP 将是一种解决方案 - 不是很优雅但可能。但我想知道,如何为不同的虚拟主机使用不同的 SSL 证书。所以我寻找一种只有一个 IP 地址的解决方案。
我有一个网络服务器,它提供不同的域名,但只分配了一个 IP 地址。这适用于 Apache 中的虚拟主机。现在我想要网站的 SSL 加密连接。如何为不同的虚拟主机设置不同的 SSL 证书?
为不同的主机名使用不同的 IP 将是一种解决方案 - 不是很优雅但可能。但我想知道,如何为不同的虚拟主机使用不同的 SSL 证书。所以我寻找一种只有一个 IP 地址的解决方案。
更新:2013
随着旧版浏览器的淘汰,SNI 似乎终于开始占据上风。这里是Apache SNI 的文档 ,这里是一篇关于 SNI 的维基百科文章,其中包括支持它的浏览器的图表。简而言之,所有主流浏览器都在支持的版本中支持它;如果支持旧版浏览器很重要,您可能必须考虑到这一点。
------ 上一个答案 ------------
SSL 主机必须绑定到唯一的 IP 地址/端口组合,因此您不能使用虚拟主机(或者至少,每个 IP 地址只能有一个 ssl 主机)。这是因为 https 在 Host: 参数在 http 中发送之前开始加密,因此它无法从主机名确定使用哪个密码 - 它只有 IP 地址。
如果 HTTP 有一个 TLS 命令,这将很容易解决,因此它可以在询问主机名后启动 SSL,但没有人问我。
有关明确的答案,请参阅http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2
在给出答案的提示和对它的评论(尤其是 Martin v. Löwis)之后,我做了一些谷歌搜索,发现了这个关于 RFC 2817 和 RFC 3546 的网站。RFC 3546 似乎是一个很好的解决方案。
每个虚拟主机都需要一个单独的 IP:端口组合。
RFC 3546 尚不可行。IE 只在 Vista 下运行时才支持,上次我查了一下 Safari 也不管理它。
虽然 DGM 提到的所有内容都是正确的,但已经有人尝试绕过对每个证书(包括 mod_gnutls 和使用TLS 扩展)的唯一 IP 地址的要求。有一些缺点,但它们可能对你来说是可以接受的。
终于有可能了!您需要服务器和客户端都支持服务器名称指示 (SNI)
支持 SNI 的浏览器:
该文档显示了配置服务器的方法:SSL with Virtual Hosts Using SNI