在SSL要求之前重定向到“www”

13

可能是将https重定向到非www和http重定向到www的重复问题。 - Bruno
@Bruno 查看了许多案例,但没有一个定义deceze给出的答案。 - williamcarswell
不太确定你的意思。我可以将我之前回答另一个问题的答案复制粘贴过来回答你的问题。(实际上和deceze说的差不多;他没有提到你可以通过拥有一个对两者都有效的证书来实现你想要的目标。)关于这个问题已经有很多类似的问题了。这里是Server Fault上的另一个问题:http://serverfault.com/a/360985/47187 - Bruno
感谢您发布这个问题。 - Pistis Valentino
3个回答

30

HTTPS 是在 TLS/SSL 上的 HTTP(参见 RFC 2818)。在任何 HTTP 流量发送之前,先建立 SSL/TLS 连接。任何重定向 (通过mod_rewrite、自定义 PHP 代码或其他方式) 都将始终在建立 SSL/TLS 连接后应用。

如果不这样做,实际上会存在安全问题,因为攻击者可以在证书验证之前重写和重定向客户端。

如果您想从 https://domain.com 重定向到 https://www.domain.com,则针对 https://domain.com 获得的证书必须对 domain.com 有效(然后,针对 https://www.domain.com 获得的证书必须对 www.domain.com 有效)。

(如果两个主机使用同一IP地址,则可以使用 Server Name Indication 使用两个不同的证书,但这相当复杂。)

最简单的方法是获得一个适用于 domain.comwww.domain.com 的有效证书。可以使用具有多个主题备用名称条目的单个证书来完成此操作。大多数 CA 应该能够颁发此类证书。有些无需额外费用即可执行此操作。


1

我找到的最佳解决方案是购买一个带有主题备用名称的新SSL证书,这样您可以在同一个证书中拥有www和非www,并且两者都有效。这样,您可以安全地将https://www重定向到https://,而不会出现任何证书错误。

1

重定向响应是通过HTTP协议发出的。为了接收这样的响应/命令,客户端首先需要建立一个HTTP连接。如果客户端试图建立HTTP_S_连接,则SSL协商需要先完成。

换句话说,不行。URL https://domain.com 对于您的应用程序无效。没有客户端应该知道这个特定的地址,因此也不应该尝试访问它。您应该避免在任何地方提供此URL,以便客户端不会尝试访问它。实际上,您似乎不想为该域运行HTTPS服务器,因此您应该将其关闭,以便客户端根本无法通过HTTPS连接到domain.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接