两个与Apache相同IP的SSL虚拟主机

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

我有几个虚拟主机的HTTP和一个虚拟主机的HTTPS

一个虚拟主机,将stream量redirect到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的虚拟主机,像这样

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

这工作正常,所有非https是forwared到HTTPS,这是超..但随后的问题。

有些时候人们去这个urlhttps://www.myothersite.org

这是由https虚拟主机回答,并创build一个“错误的证书”错误。

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

编辑:只删除一些额外的文字

您需要使用名为Server Name Indication (SNI)的SSL扩展名。 该扩展将允许服务器确定哪个指定的虚拟主机请求被指定,并相应地对其进行修补。

你的Apache可能是build立在对SNI的支持上,但是要检查它只需在你的IP,端口443上设置两个名字虚拟主机并尝试启动apache。 如果你的apache不支持SNI,error_log将会显示“你不应该使用基于名字的虚拟主机和SSL一起使用!!” 如果内置SNI,则错误日志将显示“[警告]初始化:基于名称的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上拥有两个或两个以上不同的域名及其相应的SSL证书,只需configuration其他SSL域名就可以像您的第一个一样。 如果您的apache缺乏对SNI的支持,您将需要find另一个apache包,或者重新构build一个支持SNI的工具。