每个Apache服务器的多个站点,SSL使用HTTPS显示错误的站点

时间:2013-09-28 18:29:16

标签: apache ssl https sni

我有一个运行许多客户端站点的Debian服务器。其中大多数都没有运行SSL,所以通过HTTP访问很好。

我有一个拥有SSL证书的客户,并且通过HTTPS访问他们的网站也很好。

如果您尝试使用HTTPS访问其他某个站点,并且您将被定向到具有SSL证书的其他站点,则会出现此问题。

例如,假设我们在服务器上有以下网站:

alpha.net
bravo.net
charlie.net (SSL)
delta.net

正如你所看到的,查理是唯一一个拥有SSL的人,无论你是去http charlie.net还是https charlie.net,它都能正常工作。

http到所有其他网站是好的,但如果你去https alpha.net,它最初会出现一个无效证书错误,让你继续,但它在地址栏中有alpha.net,它实际上在浏览器中显示了charlie.net网站。

我已经研究过SNI以及如果其他任何网站都有SSL,我需要将它们全部放在特定的IP地址上(我需要尝试找出其他方法,我不知道)但我不是确定为什么会这样或我如何解决它。

之前有没有其他人遇到过这种情况,你是如何解决这个问题的?

非常感谢,

罗布

2 个答案:

答案 0 :(得分:2)

这与SNI没有任何关系,因为您目前只有一台HTTPS服务器。正如您在评论中所述,alpha.net域解析为服务器的IP会发生什么。您的Apache服务器设置为侦听此IP上端口443上的请求,并将charlie.net的内容提供给这些请求。 (并且证书错误意味着浏览器发现证书的所谓域名与用于请求的域名之间存在差异。)

从HTTPS重定向到HTTP可能比它值得更麻烦,因为您需要为每个域提供有效的证书,以免您向用户提供其他安全警告。这需要在支持SNI的服务器(即带有openssl的Apache 2.2+的更高版本)上为alpha.net:443等创建虚拟主机,并添加如下所示的重定向:

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

对于您的问题,最简单的方法可能是为charlie.net使用不同的IP。使用此设置,alpha.net(等等)将无法显示其他网站的内容。

答案 1 :(得分:1)

如果您的服务器上有多个IP,请为SSL站点使用唯一的IP,所有非SSL站点共享另一个IP。

由于SSL不关心您正在访问的域是什么,因此只关注当前域是否来自从IP地址获取的域列表(公用名)。