问题
我目前遇到https://domain.com未重定向到https://www.domain.com并显示不受信任的ssl证书的问题。
这与ruby-on-rails解决方案有关 redirect to 'www' before force_ssl
问题
在SSL要求出现之前,有没有办法重定向到www域?
我正在使用PHP。
答案 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.com
和domain.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://,而不会出现任何证书错误。