【问题标题】:How can I setup different SSL-Certificates for vhosts on Apache?如何在 Apache 上为虚拟主机设置不同的 SSL 证书?
【发布时间】:2010-09-21 12:38:11
【问题描述】:

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

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

【问题讨论】:

    标签: apache ssl virtual-hosts


    【解决方案1】:

    更新:2013 年

    随着旧版浏览器的淘汰,SNI 似乎终于开始占据上风。这是docs for Apache SNI,这是wikipedia article on SNI,其中包括支持它的浏览器上的图表。简而言之,所有主流浏览器都在支持的版本中支持它;如果支持旧版浏览器很重要,您可能必须考虑到这一点。

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

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

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

    如需确定答案,请参阅http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

    【讨论】:

    • 实际上,现在有 RFC 2817,它确实允许在 HTTP 连接中进行 TLS 升级。它是在 Apache 中实现的。
    • 但是浏览器还支持吗?
    【解决方案2】:

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

    【讨论】:

    • 哇,SNI 的 RFC 始于 2003 年,但它仍然没有流行起来?我对浏览器已经支持它的说法很感兴趣。
    【解决方案3】:

    在给出答案的提示并给出答案(尤其是 Martin v. Löwis)之后,我进行了一些谷歌搜索并找到了this website about RFC 2817 and RFC 3546。 RFC 3546 似乎是一个很好的解决方案。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 是的,支持此功能的浏览器受到限制,但这是一种可能的解决方案。遗憾的是,不存在“正确”的解决方案。 RFC 3546 似乎是一个好的解决方案的最大希望。暂时您必须订购更多 IP 或限制浏览器。
      • 是的,或者在不同端口上运行的丑陋临时解决方案。 RFC3546 将会发生,但不幸的是,那一天还有很长的路要走。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        终于有可能了!您需要服务器和客户端都支持服务器名称指示 (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

        【讨论】:

          猜你喜欢
          • 2016-11-05
          • 2013-01-27
          • 1970-01-01
          • 2017-06-18
          • 2011-01-31
          • 2015-11-13
          • 1970-01-01
          • 2014-02-20
          • 2010-10-23
          相关资源
          最近更新 更多