在ssl要求之前重定向到'www'

时间:2012-06-07 09:55:48

标签: php redirect ssl

问题

我目前遇到https://domain.com未重定向到https://www.domain.com并显示不受信任的ssl证书的问题。

这与ruby-on-rails解决方案有关 redirect to 'www' before force_ssl

问题

在SSL要求出现之前,有没有办法重定向到www域?

我正在使用PHP。

3 个答案:

答案 0 :(得分:23)

HTTPS是基于TLS / SSL的HTTP(请参阅RFC 2818),它首先在发送任何HTTP流量之前建立SSL / TLS连接。在建立SSL / TLS连接后,任何重定向(通过mod_rewrite,自定义PHP代码或其他)都将始终适用。

不这样做实际上是一个安全问题,因为攻击者可以在证书验证之前重写并重定向客户端。

如果您要从https://domain.com重定向到https://www.domain.com,则https://domain.com获取的证书必须对domain.com有效(然后,为{{1}获取的证书}}必须对https://www.domain.com)有效。

(如果两个主机在同一个IP地址上提供服务,则可以使用具有服务器名称指示的两个不同证书,但这相当复杂。)

最简单的方法是获取对www.domain.comdomain.com都有效的证书。这可以使用具有多个主题备用名称条目的单个证书来完成。大多数CA应该能够颁发此类证书。有些人不收取额外费用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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