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

每个Apache服务器有多个站点,SSL使用HTTPS显示错误站点,apache,ssl,https,sni,Apache,Ssl,Https,Sni,我有一个Debian服务器,它运行许多客户端站点。其中大多数都没有运行SSL,因此通过HTTP访问是可以的 我有一个客户拥有SSL证书,通过HTTPS访问他们的站点也可以 如果您尝试使用HTTPS访问其他站点之一,则问题会出现,您将被定向到具有SSL证书的其他站点 例如,假设服务器上有以下站点: alpha.net bravo.net charlie.net (SSL) delta.net 正如您所看到的,charlie是唯一一个使用SSL的,无论您使用http charlie.net还是ht

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

我有一个客户拥有SSL证书,通过HTTPS访问他们的站点也可以

如果您尝试使用HTTPS访问其他站点之一,则问题会出现,您将被定向到具有SSL证书的其他站点

例如,假设服务器上有以下站点:

alpha.net
bravo.net
charlie.net (SSL)
delta.net
正如您所看到的,charlie是唯一一个使用SSL的,无论您使用http charlie.net还是https charlie.net,它都可以正常工作

http到所有其他站点都是可以的,但是如果您要转到https alpha.net,它最初会出现一个无效的证书错误,并允许您继续,但是当地址栏中有alpha.net时,它实际上会在浏览器中显示charlie.net站点

我已经研究了SNI,以及如果任何其他站点都有SSL,我将需要将它们全部放在特定的IP地址上(我需要尝试解决其他一些问题,因为我不知道如何解决),但我不确定为什么会发生这种情况,或者我如何解决它

以前有没有其他人遇到过这种情况?你是如何解决的

非常感谢,


Rob

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


由于SSL不关心您访问的域是什么,它只关心当前域是否从Ip地址获得的域列表(通用名称)中获得批准。

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


由于SSL不关心您访问的域是什么,它只关心当前域是否从Ip地址获得的域列表(通用名称)中获得批准。

这与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(等)将无法显示其他站点的内容。

这与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(等等)将无法显示另一个站点的内容。

我进一步研究了这一点,发现这是因为包含443的唯一apache站点配置文件是charlie.net。因为这是唯一一个包含它的域,即使您尝试使用https和其他域之一,您也可以访问charlie.net,因为它是唯一一个使用https的域。所以这很有道理。我现在不知道如何设置443并给它一个https指令以重定向到http,因为没有证书。因此,如果有人知道如何做到这一点,我将不胜感激。joon在Webmasters SE上注意到了同样的问题:我进一步研究了这个问题,我发现这是因为包含443的唯一apache站点配置文件是charlie.net。因为这是唯一一个包含它的域,即使您尝试使用https和其他域之一,您也可以访问charlie.net,因为它是唯一一个使用https的域。所以这很有道理。我现在不知道如何设置443并给它一个https指令以重定向到http,因为没有证书。因此,如果有人知道如何做到这一点,我将不胜感激。joon在网站管理员SE上注意到了同样的问题: