Apache 在同一个 IP 上有两个 SSL 虚拟主机

Apache 在同一个 IP 上有两个 SSL 虚拟主机

我有一个具有一个 IP 地址的 apache 服务器。(在 debian 服务器上)。

我有几个用于 http 的虚拟主机和一个用于 https 的虚拟主机

一个虚拟主机,将流量重定向到 https 虚拟主机,这样就可以正常工作,如下所示

<VirtualHost *:80>
ServerName mymainsite.com
ServerAlias www.mymainsite.com
ServerAlias myothersite.org
ServerAlias www.myothersite.org
    RewriteEngine on
    RewriteRule ^(.*)$ https://www.mymainsite.com$1 [L,R=301]
(...)

我有另一个用于 https 的 vhost,就像这样

<VirtualHost *:443>
ServerName www.mymainsite.com
(...)

并且这工作正常,所有非 https 都被转发到 https,这非常棒...但是问题来了。

有时人们会访问这个网址https://www.myothersite.org

这是由 https vhost 回答的,并创建“错误证书”错误。

问题是:有没有办法可以防止这种情况,而无需使用第二个 IP 地址,或购买多 URL 或通配符 SSL 证书?

编辑:只需删除一些多余的文字

答案1

您需要使用名为服务器名称指示(SNI)。此扩展将允许服务器确定请求指定给哪个命名虚拟主机,并相应地对其进行修补。

您的 apache 可能内置了对 SNI 的支持,但要检查它,只需在您的 IP、端口 443 上设置两个名称虚拟主机,然后尝试启动 apache。如果您的 apache 不支持 SNI,error_log 将显示“您不应将基于名称的虚拟主机与 SSL 结合使用!!”如果内置了 SNI,则错误日志将显示“[warn] Init:基于名称的 SSL 虚拟主机仅适用于具有 TLS 服务器名称指示支持的客户端(RFC 4366)”。

还要注意的是,浏览器也需要支持 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

是的,简而言之,您可以在同一个 IP 上拥有 2 个或更多不同的域及其各自的 SSL 证书,只需像第一个域一样配置其他 SSL 域即可。如果您的 apache 缺乏对 SNI 的支持,您将需要找到另一个 apache 包或重建支持 SNI 的包以使其正常工作。

相关内容