Chrome中出现net::ERR_INSECURE_RESPONSE错误

68

当我从我的API获取一些数据时,在Chrome控制台中出现错误net::ERR_INSECURE_RESPONSE。

这个错误通常是由于未经签名的证书引起的。但是,这不是问题所在,因为我拥有有效和已签名的证书。

这个错误并不经常发生,如果我重新启动Chrome浏览器,它就会消失。它在其他浏览器中也完全没有发生(在Safari、Mozilla、Opera上测试过)。

这是为什么?这只是一个浏览器bug吗?


2
我也遇到了这个问题,但它在客户端是100%可重复的,在外部则是0%可重复的。我也使用了有效和签名的证书,这使得网络上几乎所有信息都无法使用,因为它们已经引用了自签名证书。 - kirps
您联系的API是否也在SSL上? - artur99
8个回答

80

如果您从Chrome 55升级到Chrome 56(56.0.2924.87),会出现这种情况。
这是加强安全措施。
重新启动浏览器无法解决问题,这不是一个错误。

谷歌表示希望您永远不要遇到此消息,因为证书颁发机构已经被要求在2016年停止发放SHA-1证书。 以防万一,谷歌计划继续发出警告,直到Chrome完全停止支持SHA-1,即在2017年1月1日之前。当那天到来时,仍使用该功能的网站将触发致命的网络错误。 (来源:Engadget.com

如果出现这种情况,最可能的原因是您(或网站)的SSL证书使用了SHA1。
SHA1已经失效,使用SHA1的SSL证书不再安全(Chrome现在已经展示了很长时间 - 现在会阻止NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM)。

另一个可能的原因是您的SSL证书已过期
还有,您应该禁用与SSL2和SSL3的向后兼容性Poodle Attack
您应该仅使用TLS(SSL 3.1+)。

要测试域的SSL证书,您可以使用SSL labs SSL test

查找问题的确切原因:
打开Chrome开发者控制台(CTRL + SHIFT + J OR F12)
并切换到安全选项卡

Security

Console

Details

了解更多信息:
https://support.google.com/chrome/answer/95617?visit_id=1-636221396724527190-3454695657&p=ui_security_indicator&rd=1

知道一下:

SHA-1已经越来越脆弱和不安全了十年,这很危险,考虑到我们倾向于相信带有“https://”的网站。 Mozilla Firefox和Microsoft Edge等其他浏览器也计划停止支持它,以鼓励网站所有者尽快转换为更安全的SHA-2证书。

如果您急需解决此问题(必须先关闭所有运行中的Chrome - 否则不起作用):

chrome --args --ignore-certificate-errors

请注意:不要在启用这些命令行设置的Chrome实例中进行在线银行或Gmail操作。


嗨 - 解释得非常好!我使用此教程成功地设置了我的证书,https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04但是现在每次尝试加载脚本时都会出现这个错误。您有什么升级的想法吗?我认为这是目前可用的最新选项。 - itchyspacesuit
我已经通过命令“defaults write com.google.Chrome EnableSha1ForLocalAnchors -bool true”并重新启动Chrome来解决了Mac上的问题。关于如何在其他操作系统上执行enableSha1ForLocalAnchors有不同的细节。 - okutane
另一个原因是你是一个使用自签名证书的网络开发人员。谢谢谷歌。 - Charles Wood

65

最近我也遇到了类似的问题。我想访问一个使用自签名证书的https REST端点,但在Google Chrome控制台中却显示net::ERR_INSECURE_RESPONSE。通过网上搜索,我找到了下面这个解决方案并成功解决了问题:

  1. 在你试图进行API调用的同一窗口中打开一个新的选项卡。
  2. 导航到你想要以编程方式访问的https URL。
  3. 你应该会看到一个类似于这样的屏幕: enter image description here
  4. 点击“高级” > 前往 <url>,然后你就应该能够看到响应(如果有的话)
  5. 现在尝试通过你的脚本进行API调用。

我希望你不会使用它来传输机密信息(信用卡支付)。如果您有一个内部自签名证书,显然正确的方法是将证书添加到机器/域上的受信任证书(或Linux上的mozroots)。Unsafe将忽略所有证书错误,这意味着使用SSL完全没有意义,您可以使用HTTP。 - Stefan Steiger
2
这个答案非常有用。谢谢! - Evgeniya Manolova
是的,我也用了同样的技巧,但使用真正的证书似乎是唯一可行的解决方法。 - Vadorequest
@StefanSteiger 这个设置很复杂,对源代码有影响,在开发/暂存/生产环境中的工作方式也不同。基本上,这是另一层复杂性。此外,Let's Encrypt 不提供 IP 地址的证书,因此使用 DNS 路由获取域名是必要的。如果它不是免费的,情况会更糟,例如在暂存环境中支付证书费用。我并不是在抱怨 Let's Encrypt,而是关于证书的整个复杂性。特别是对于初学者和非系统管理员来说。 - Vadorequest
@Vadorequest:我觉得设置SSL并不难。也许你不应该使用像Apache或IIS这样的低效服务器软件。此外,你可以在开发和测试环境中设置SSL,这样生产环境和测试环境之间就没有区别了。如果你的测试环境与生产环境不同,那么它就不是真正的测试环境,而只是一个多余的步骤。 - Stefan Steiger

2

我在Amazon.ca、Meetup.com和Symantec首页上遇到了这个错误。

我打开Chrome浏览器的更新页面(版本号为53.*),检查是否有升级,结果显示没有可用的更新。在询问了办公室里的同事后,发现最新版本是55,但由于某些原因,我卡在了53版本。

手动从Chrome网站下载并升级后,问题消失了!


2

2
对我来说,这个问题的答案在StackOverflow上就有:

ERR_INSECURE_RESPONSE caused by change to Fiddler's root certificate generation using CertEnroll for Windows 7 and later

不幸的是,这个更改可能会给之前信任Fiddler根证书的用户带来问题;浏览器可能会显示NET::ERR_CERT_AUTHORITY_INVALID或The certificate was not issued by a trusted certificate authority等错误消息。

(摘自原始来源)

我在浏览器上遇到了ERR_CERT_AUTHORITY_INVALID错误,在Chrome的开发者工具中出现了ERR_INSECURE_RESPONSE。


1

不知道这个问题是否还相关,但我在一个客户端上遇到了这个问题,其Windows设置的日期和时间不正确。这将是观看的另一种选择。 如果是这种情况,其他浏览器也会出现这种情况(至少在Firefox和Chrome上)。

我通过更新Windows上的日期时间来解决了这个问题。 希望能帮助到别人。


1
也许你遇到了这个问题:net::ERR_INSECURE_RESPONSE
您需要检查服务器支持的加密算法。例如,对于apache,您可以通过以下方式配置密码套件:cipher suite
您正在运行哪个版本的chrome,并且您的API由哪个服务器提供服务?

1
不要认为这是问题,因为重新启动浏览器可以解决此问题。 - Karim
1
我使用Chrome 50.0.2661.102浏览器,并使用Rails来提供我的API。然而,正如我所提到的,无法始终重现此问题,因为关闭浏览器会使一切恢复正常,因此似乎不是加密算法的问题。 - Karim

1
我在测试我的 Cordova 应用程序时遇到了这个问题。恰好这个安卓设备不会保留日期,而会以某种方式重置回出厂日期。它调用的 API 具有从今年开始有效的证书,而启动后设备日期是在 2017 年。目前,我必须使用 adb shell 手动更改日期。

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