FireFox - 完整性属性中的任何"sha256"哈希都与子资源的内容不匹配



我们创建了一个使用cdnjs资源的网站。这个网站已经上线了几个月,但我们在这个 CDN 和FireFox的资源方面存在零星问题。

  • 控制台中每个脚本/样式 CDN 资源的错误为:

    完整性属性中的任何"sha256"哈希都与子资源的内容不匹配。

  • 每个资源的"网络"选项卡中的错误消息是:

    用于获取此资源的连接不安全

我遇到问题的资源包括以下元素(因为它们出现在我们的网页中):

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.35.4/css/bootstrap-dialog.min.css" integrity="sha256-wstTM1F5dOf7cgnlRHIW3bmoRAAGh6jL7tMIvqTuFZE=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" integrity="sha256-yMjaV542P+q1RnH6XByCPDfUFhmOafWbeLPmqKh11zo=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqtree/1.4.4/jqtree.min.css" integrity="sha256-ymsp1QFcwiJbIgAoSOkMtqe4GFczZH1KjXLq6y5f+QY=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.35.4/js/bootstrap-dialog.min.js" integrity="sha256-IpgnbT7iaNM6j9WjtXKI8VMJ272WM9VvFYkZdu1umOA=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment-with-locales.min.js" integrity="sha256-K+AZsAFjiBd4piqBmFzaxDsiQiHfREubm1ExNGW1JIA=" crossorigin="anonymous"></script>

重现步骤

您可以使用上述 URL 之一重现问题,并将其直接放置在 FireFox 浏览器的 URL 中。资源应在浏览器窗口中加载,但至少CTRL+F5按一次(最多 5 次)后,会出现错误。尽管我们位于荷兰,但我可以从多台PC复制它,所以可能是时间问题或类似的事情(超出我的专业知识)?

对于我们使用的其他 CDN 的任何其他资源,不会发生这种情况,如下所示:

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

我的环境:

  • Windows 10 专业版 64 位修补到最新版本
  • 火狐 60.0.1 (64 位)

我的问题

这是特定于 cdnjs 的问题,他们必须解决此问题,还是FireFox的问题,或者这是我们请求资源的方式的问题?


作为旁注,我们还定期在Google ChromeMS Internet Explorer 11MS EdgeOpera上测试我们的软件,并且从未在这些浏览器(或任何其他浏览器)上遇到过这个问题。

我已经在Mozilla的论坛上创建了一个帖子,但回应是这超出了范围,建议将其发布在SO上或在GitHub上提交错误。我还没有做后者成为我(还)不相信这是FireFox中的一个错误。我还在cdnjs的github存储库上提交了一个问题。

TL;DR:在带有Firefox 45.6.0的Linux(RHEL 7.3)上类似的问题可以通过从 getfirefox.com 下载60.0.2来解决。

恐怕这不太可能解决@Igor的问题,但我有一个非常相似的问题,并通过Firefox升级解决了它;也许这会帮助其他人。

就我而言,我看到了相同的情况

用于获取此资源的连接不安全

Web 控制台的"网络"选项卡中的消息不仅适用于 Cloudflare,还适用于其他几个站点:

  • https://cdnjs.cloudflare.com/
  • https://ajax.googleapis.com/
  • https://www.googletagmanager.com/
  • https://www.google.com/
  • https://www.youtube.com/
  • https://www.mozilla.org/(!

然而,铬没有受到影响(猞猁和卷曲也是如此)。

鉴于失败的错误消息,我在首选项 -> 高级 -> 证书 -> 查看证书中四处寻找,并立即怀疑服务器 www.google.com 选项卡中的所有过期证书(自 2014 年以来! 但是,尝试删除它们失败了;他们在新选项卡中重新测试任何有问题的网站后立即返回。

Mozilla帮助页面上的所有建议也失败了:没有代理,没有防病毒,安全模式,刷新配置文件,切换到全新的配置文件(也获得了伪造的2014证书,因此显然是硬编码),禁用硬件加速,禁用DNS预取以及其他一些about:config黑客。 通过 yum 重新安装现有的 Firefox 版本也失败了,手动删除所有 sqlite 文件和storage/default下大多数相关站点(都在$HOME/.mozilla/firefox/<profile>内)也失败了。 即使是Mozilla自己的certutil也未能在新的,干净的配置文件中读取新铸造的cert8.db

$ certutil -L
certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format.

我甚至尝试通过 45.x 的高级首选项页面中的导入选项重新加载 Firefox 的根证书,但我在 Mozilla 的 Mercurial 存储库中找到的纯文本版本显然没有被 Firefox 的导入按钮理解。 (或者也许是;没有反馈。 但是"服务器"选项卡上的过期内容并没有消失。

我提到所有不起作用的事情,一方面是因为其中一些行动确实帮助了其他报告类似问题的人,也因为运行所有可能性(以及与同事的几次干预讨论)花费了大量时间。

最终,通过获取最新的Firefox二进制文件

  • https://support.mozilla.org/en-US/kb/install-firefox-linux
  • http://www.getfirefox.com/

在本地目录中解压缩压缩包工作正常,完成和验证需要整整两分钟。 新旧配置文件都可以很好地使用它。 你瞧,"服务器"选项卡完全没有所有证书,无论是否过期。 就我而言,我很确定这是问题所在,我无法删除虚假证书是 45.x 中的一个错误。

这个问题很老了,但如果有人遇到这个问题,请检查脚本属性的完整性

<script src="https://code.jquery.com/jquery-3.1.1.min.js"  integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"   ></script>

如果它对其他人有帮助,我的 Google 跟踪代码管理器脚本网址会给出几种不同的内容变体,每种变体都有不同的哈希值,因此试图赋予它完整性属性是相当无望的。

curl -s 'https://www.googletagmanager.com/gtag/js?id=UA-9715943-1' | openssl dgst -sha256 -binary | openssl base64 -A

最新更新