问题:

问题:

我有一台装有 Ubuntu 的 EC2 服务器。它运行多个网站,其中一个网站使用 SSL 证书。SSL 运行良好,但问题是当您使用 https 输入其他域之一的 URL 并添加其中一个 SSL 域页面的地址时,您可以看到 SSL 域页面。

例如https://domain.com/page/1是原始页面。如果您输入https://domain2.com/page/1您将看到 SSL 配置域的原始页面。如果您从中删除 httpshttps://domain2.com/page/1所以就是http://domain2.com/page/1您会看到“页面未找到”,这正是您应该看到的。

抱歉,但这很难解释,我以前从未遇到过这种情况。一定是 Apache 配置出了问题,但我不确定是什么问题。

答案1

问题:

您只有一个 SSL vhost,因此一个 SSL vhost 将匹配所有 SSL 请求,无论域名如何。

可能的解决方案:

为每个域启用 SSL。

为服务器将托管的每个域获取 SSL 证书。为每个域配置一个 vhost。

这只对支持 SNI 的浏览器有帮助。不支持 SNI 的浏览器无论使用哪个域都会获取第一个 SSL vhost。

创建一个没有内容的“默认”SSL 虚拟主机。

创建一个默认的 SSL 虚拟主机,并拥有自己的证书。类似于 webserver.example.com。

这仅适用于支持 SNI 的浏览器。不支持 SNI 的浏览器即使尝试查看“真实”SSL vhost 也会收到默认 vhost。

获取涵盖所有域的 SAN 证书。

再次为每个域设置一个 SSL vhost,但让它们都使用相同的 SAN 证书。

即使在不支持 SNI 的浏览器上这也将有效,但是如果您以后想要添加更多域,就会变得很麻烦。

答案2

我找到了一个可行的解决方案,但我认为这不是最好的解决方案。我继续创建了一个通用自签名证书,用于其他未配置 SSL 或未使用 SSL 证书的域。然后,我为每个域创建并启用了虚拟主机文件。如果有人有更好的解决方案,请分享。

答案3

如果您安装了 openssl-1.X 和支持它的网络服务器,您可以使用 SNI(代表服务器名称指示),它的工作方式类似于 SSL 虚拟主机的虚拟主机。

只需编译 openssl-1.X 并将您的网络服务器链接到新编译的库,您就可以拥有虚拟主机 ssl 域!

干杯

答案4

您的问题是服务器正在重定向到您的 SSL 证书指向的域。服务器所知道的只是您的客户端正在尝试通过 https 访问网站,并且它有一个指向您的 SSL 域的 SSL。您需要明确告诉它将非 https 域重定向到 http 才能解决问题。

您可以使用 mod_rewrite 来实现此目的,方法是在 .htaccess 文件中添加以下内容:

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

相关内容