【问题标题】:Failed to load resource: net::ERR_INSECURE_RESPONSE加载资源失败:net::ERR_INSECURE_RESPONSE
【发布时间】:2014-07-04 12:14:49
【问题描述】:

有没有办法欺骗服务器,所以我不会收到此错误:

内容被阻止,因为它没有由有效的安全证书签名。

我正在将一个 html 网站的 iframe 拉入另一个网站,但我在这个问题的标题中不断收到控制台 (chrome) 错误,并且在 Internet Explorer 中显示:

内容被阻止,因为它没有由有效的安全证书签名。

【问题讨论】:

  • 听起来您正试图从安全资源中访问不安全的资源。我相信他们也有类似的问题here

标签: iframe ssl-certificate chromium self-signed


【解决方案1】:

您的资源可能使用通过 HTTPS 协议的自签名 SSL 证书。 Chromium,因此谷歌浏览器默认阻止这种被认为不安全的资源。

你可以这样绕过:

  • 假设您的框架的 URL 是 https://www.domain.com,请在 chrome 中打开一个新选项卡并转到 https://www.domain.com
  • Chrome 会要求您接受 SSL 证书。接受它。
  • 然后,如果您使用框架重新加载页面,您会看到它现在可以工作了

您可以猜到的问题是,您网站的每个访问者都必须执行此任务才能访问您的框架。

您会注意到,chrome 会在每个导航会话中阻止您的 URL,而 chrome 可以永远记住您信任此域。

如果你的框架可以通过HTTP而不是HTTPS访问,我建议你使用它,这样就可以解决这个问题了。

【讨论】:

  • 我认为当您打开另一个选项卡时,您需要转到 https://domain.com 并接受 SSL 证书。
  • @RémiBecheras,有没有办法让 Chrome 记住在多个导航会话中信任证书?
  • 为了添加这样的规则,您必须获得证书。如果它是你的,你已经拥有了。如果没有,请单击地址栏上的 https 左侧图标 > 证书信息 > 详细信息 > 导出。然后,使用这个文件
  • 这也适用于奇怪的情况,即网站向同一个域(本身)发送请求,我刚刚批准继续通过自签名证书,但随后 Chrome 抛出此错误。
  • 有没有办法通过客户端代码进行这种绕过?意思是,我可以在客户端中编程“嘿,您尝试访问的这个服务器看起来很粗略,但没关系,相信我。我写给你们两个,从技术上讲,你们是代码兄弟/姐妹/性别中立的兄弟姐妹”?
【解决方案2】:

有时谷歌浏览器会抛出这个错误,即使它不应该。 我在 Chrome 有新版本时遇到过,需要重新启动。 重新启动同一页面后,没有任何错误。 控制台中的错误是:

net::ERR_INSECURE_RESPONSE

【讨论】:

  • 确认,重新启动 Chrome(并杀死所有后台 Chrome 进程)为我修复了它。
  • 不起作用..它是一个自签名证书..重新启动它不会起作用
  • 也和我确认了!
  • @Balazs,重启浏览器是唯一的方法吗?假设我们无法重启,有没有办法通过chrome://net-internals 来做到这一点?
  • Chrome 的重启(没有后台进程)也为我修复了它。谢谢!
【解决方案3】:

我在华硕 T100 Windows 10 测试设备上仍然遇到了上述问题(最新的)Edge 和 Chrome 浏览器。

解决方案在设备的日期/时间设置中;不知何故,日期设置不正确(过去的日期)。通过设置正确的日期(并重新启动浏览器)来恢复它为我解决了这个问题。我希望我可以省去调试这个问题的麻烦。

【讨论】:

  • 我在运行 Windows 8 的华硕 zenbook 上遇到了类似的错误。不幸的是,这对我不起作用,但您能更详细地解释一下您是如何重置日期/时间的吗?只需通过windows ui设置时区?
  • @DEls,我在 Windows 配置中切换了时区 - 为我重置了系统时钟。之后你重启浏览器了吗?如果计时没有解决问题,您可能需要查看本主题中描述的其他解决方案。
  • 我不知道为什么,但这对我有用。年份设置为 2048 年,将其更改为当前年份并全部固定。谢谢@SebastiaanOrdelman
【解决方案4】:

打开您的控制台并点击里面的 URL。它会带您进入 API 页面,然后在页面中接受 SSL 证书,返回您的应用页面并重新加载。 请记住,之前应该已经为您的开发环境颁发了 SSL 证书。

【讨论】:

    【解决方案5】:

    为此错误提供另一种可能的解决方案。

    如果您有一个对后端进行 API 调用的前端应用程序,请确保您引用了已颁发证书的域名。

    例如

    https://example.com/api/etc
    

    而不是

    https://123.4.5.6/api/etc
    

    在我的例子中,我使用证书对安全服务器进行 API 调用,但使用的是 IP 而不是域名。这抛出了Failed to load resource: net::ERR_INSECURE_RESPONSE

    【讨论】:

      【解决方案6】:

      如果您正在开发,并且您正在使用 Windows 机器进行开发,只需添加 localhostas a Trusted Site

      是的,根据 DarrylGriffiths 的评论,虽然看起来您正在添加 Internet Explorer 设置...

      我相信这些是 Windows 而不是 IE 设置。虽然 MS 倾向于假设它们只是 IE(因此“启用保护模式”旁边的警报要求重新启动 IE)...

      【讨论】:

      • 我用的是linux ubuntu,不是windows,有什么解决办法吗?
      【解决方案7】:

      尝试此代码以观察并报告可能的net::ERR_INSECURE_RESPONSE

      我也遇到了这个问题,使用的是自签名证书,我选择不将其保存到 Chrome 设置中。访问 https 域并接受证书后,ajax 调用工作正常。但是一旦接受超时或在首次接受之前,jQuery.ajax() 调用就会静默失败:timeout 参数似乎没有帮助,error() 函数永远不会被调用。

      因此,我的代码从未收到 success()error() 调用,因此挂起。我相信这是 jquery 处理这个错误的一个错误。我的解决方案是在指定超时后强制调用error()

      此代码确实假定了 jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional}) 形式的 jquery ajax 调用。

      注意:您可能希望更改 setTimeout 中的函数以最好地与您的 UI 集成:而不是调用 alert()

      const MS_FOR_HTTPS_FAILURE = 5000;
      $.orig_ajax = $.ajax;
      $.ajax = function(params)
      {
        var complete = false;
        var success = params.success;
        var error = params.error;
        params.success = function() {
          if(!complete) {
            complete = true;
            if(success) success.apply(this,arguments);
          }
        }
        params.error = function() {
          if(!complete) {
            complete = true;
            if(error) error.apply(this,arguments);
          }
        }
        setTimeout(function() {
          if(!complete) {
            complete = true;
            alert("Please ensure your self-signed HTTPS certificate has been accepted. "
              + params.url);
            if(params.error)
              params.error( {},
                "Connection failure",
                "Timed out while waiting to connect to remote resource. " +
                "Possibly could not authenticate HTTPS certificate." );
          }
        }, MS_FOR_HTTPS_FAILURE);
      
        $.orig_ajax(params);
      }
      

      【讨论】:

        【解决方案8】:

        这个问题是因为你的 https 意味着 SSL 认证。尝试本地主机。

        【讨论】:

          猜你喜欢
          • 2014-08-21
          • 1970-01-01
          • 2014-03-31
          • 2014-06-24
          • 2018-10-10
          • 2014-07-06
          • 2015-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多