将 https 重定向到另一个 https

将 https 重定向到另一个 https

我一直在谷歌搜索这个问题,但讽刺的是,我找不到具体的答案。我以前自己回答过这个问题,但现在我记不起自己的解释。

每年都会有人要求我这样做几次。我希望向他们推荐一些值得信赖的文章来解释这一点。

我想获取以下网址https://www.example.com/并将流量重定向至https://www.example2.com/

我相信这在技术上是可行的,但并不受欢迎。这种方法有什么问题?由于我将浏览器重定向到另一个网站,浏览器会弹出安全弹出窗口吗?有人可以提供一些可靠的文档链接来解释这一点吗?

答案1

您可以这样做,两个网站都需要有效的 SSL 证书。这样浏览器就不会弹出安全提示。但是,如果两个网站都位于同一台服务器上,则两个域名都需要托管在不同的 IP 地址上。

Web 服务器查看 HTTP 请求中的“Host”标头,以确定需要为哪个网站提供服务。SSL 协商发生在 HTTP 请求发送之前,因此此时 Web 服务器无法确定将显示哪个网站。它将始终向浏览器发送相同的证书。

有两种方法可以解决这个问题:

  • 拥有 *.example.com 的通配符证书,因此所有子域可以共享同一个证书。
  • 在不同的 IP 地址上运行每个 SSL 站点。这样,Web 服务器通过检查接收传入连接的 IP 地址,知道可以向浏览器发送哪个 SSL 证书。

请注意,完全可以将多个 IP 地址附加到同一个网络适配器,只是您需要在 IP 地址空间中有第二个可用的 IP 地址。

更新:如今,您可以在一个 IP 上运行多个 SSL 站点。要启用此功能,请在您的 Web 服务器上配置 SNI 支持。大多数现代浏览器(Windows XP 和 Android 2 除外)都支持此功能。

答案2

我从未尝试过,所以我没有具体的经验,但它应该有效。你需要有一个有效的 SSL 证书https://www.example.com因为主机名在 HTTP 标头内加密,所以您的服务器在解密之前不会知道重定向。解密后,它应该像正常的 HTTP 请求一样重定向。

答案3

这为什么不受欢迎呢?

例如,Big Bank 和 Little Bank 都使用 https 运行网站,以便为客户提供安全、愉快的感觉。Big Bank 收购了 Little Bank。在某个时候,IT 人员会为https://www.littlebank.comhttps://www.bigbank.com。这是从 https 重定向到 https 的合法理由。

这应该可以正常工作。

答案4

在我看来,这个问题可以在传输层上解决。假设您有指向 192.168.0.1 的 example.com 的 DNS A 记录。当您输入https://example.com在浏览器中,您的 PC 与 IP 为 192.168.0.1 的服务器建立了 TCP 连接,其中某个进程在端口 443 上侦听。如果同时服务器(不尝试获取通过此 TCP 会话发送的数据的详细信息,例如启动 SSL 协商)与 192.168.0.2(另一台具有指向它的 DNS A example2.com 的服务器)建立 TCP 连接,结果会怎样?安装在第一台服务器上的 HA 代理 Linux 实用程序可能会使用如下配置解决此问题:

defaults
        log    global
        mode    tcp
        retries 2
        option redispatch
        option tcplog
        option tcpka
        option clitcpka
        option srvtcpka
        timeout connect 5s      
        timeout client  24h     #timeout client->haproxy(frontend)
        timeout server  60m

listen front443 192.168.0.1:443
    server back443 192.168.0.2:443

但是,这将导致 SSL 证书错误,除非您的 example2.com 网络服务器显示 CN=example2.com 和 SAN=example.com 的 SSL 证书。

或者,您可以设置一个 DNS 端口范围,当来自用户的目标 example.com 和 example2.com 解析为 192.168.0.1 时。

相关内容