8

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

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

4

6 回答 6

8

更新: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

于 2008-11-09T17:16:59.317 回答
4

在给出答案的提示和对它的评论(尤其是 Martin v. Löwis)之后,我做了一些谷歌搜索,发现了这个关于 RFC 2817 和 RFC 3546 的网站。RFC 3546 似乎是一个很好的解决方案。

于 2008-11-09T18:01:46.123 回答
2

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

于 2008-11-09T17:25:13.483 回答
1

每个虚拟主机都需要一个单独的 IP:端口组合。

RFC 3546 尚不可行。IE 只在 Vista 下运行时才支持,上次我查了一下 Safari 也不管理它。

于 2008-11-10T00:31:39.533 回答
1

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

于 2008-11-10T14:04:12.937 回答
1

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

支持 SNI 的浏览器:

  • Mozilla Firefox 2.0 或更高版本
  • Opera 8.0 或更高版本(启用 TLS 1.1)
  • Internet Explorer 7.0 或更高版本(在 Vista 上,不是 XP)
  • 谷歌浏览器
  • Mac OS X 10.5.6 上的 Safari 3.2.1

该文档显示了配置服务器的方法:SSL with Virtual Hosts Using SNI

于 2013-02-13T14:25:07.617 回答