【问题标题】:Firefox won't redirect from HTTP to HTTPS properly?Firefox 不会正确地从 HTTP 重定向到 HTTPS?
【发布时间】:2017-05-01 18:30:36
【问题描述】:

我正在尝试将用户从 https://www.example.com 重定向到 https://example.com(因为 SSL 证书仅对后者有效),这在 Chrome 中使用此代码非常有效:

if(isset($_SERVER['HTTPS']) and $_SERVER['SERVER_PORT'] == 443){
    // We are on https version
    if(strtolower($_SERVER['SERVER_NAME']) == 'www.example.com'){
        // Wrong domain: Redirect to safety
        header('Location: https://example.com/', true, 301);
        exit();
    }else{
        // We are safe
        die('SSL certificate OK: Your credit card is now safe');
    }

}else{
    // Redirect to safety
    header('Location: https://example.com/', true, 301);
    exit();
}

但是,Firefox 拒绝重定向,并且一直显示通常的 INSECURE SITE:立即离开此页面,否则您的信用卡将被盗,等等。 警告仅此而已.是否有一些解决方法可以强制此 Firefox 首先重定向然后检查 SSL 证书,就像 Chrome 已经做的那样?

注意:我没有使用 IIS,所以我不需要检查 $_SERVER['HTTPS'] 的值,它按原样工作。

【问题讨论】:

    标签: firefox https ssl-certificate


    【解决方案1】:

    您一直与无效证书错误发生冲突的原因是HTTPS 的工作方式。即,HTTP 连接通过 TLS 建立隧道。这意味着客户端在到达进行重定向的 HTTP 层之前启动与 Web 服务器的 TLS 连接(包括验证服务器证书的过程)。结果是浏览器永远不会看到您的重定向,因为 Firefox 在 Web 服务器可以响应之前阻塞了证书。

    有一些方法可以在完成 TLS 握手之前处理 Host 标头,通常涉及 SNI,但这仍然需要来自服务器的有效证书,因此在这里并不能真正帮助您。

    但是,可以为您的域使用对“www”前缀也有效的证书,例如example.comwww.example.com。大多数证书颁发机构免费为他们颁发的任何 SSL 证书提供此功能,只要您在证书请求中指定了两个域。 (如果您需要这方面的更多信息,请告诉我。)

    为了更直接地回答您的问题:不,由于协议的工作原理,您不能绕过证书检查,这是故意行为。另见this answer

    【讨论】:

    • 谢谢,请不要忘记投票,否则网站将阻止我以后再次提问。
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 2020-03-19
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多