【问题标题】:FireFox - None of the "sha256" hashes in the integrity attribute match the content of the subresourceFireFox - 完整性属性中的“sha256”哈希均不匹配子资源的内容
【发布时间】:2018-11-04 11:54:38
【问题描述】:

我们创建了一个使用来自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 Pro 64bit 已修补至最新版
  • FireFox 60.0.1(64 位)

我的问题

这是 cdnjs 特有的问题,他们必须解决这个问题,还是 FireFox 的问题,或者这是我们如何请求资源的问题?


附带说明一下,我们还定期在 Google ChromeMS Internet Explorer 11MS EdgeOpera 上测试我们的软件,并且从未在这些浏览器(或任何其他浏览器)上遇到此问题。

我已经在 Mozilla 的论坛上created a post,但响应是这超出了范围,建议将其发布在 SO 上或在 GitHub 上提交错误。我还没有完成后者,因为我(还)不相信这是 FireFox 中的一个错误。我还提交了issue on cdnjs's github repo

【问题讨论】:

  • 这实际上是一个 Firefox 错误,因为 SRI 匹配。没有其他浏览器可以做到这一点。
  • 同样是我们的情况似乎是一个 FF 错误,因为我们使用来自 CDN 提供商的完整性代码,它适用于几乎所有浏览器,除了 1-2 个 FF 浏览器实例
  • 是的,这个问题很老了,但 Firefox 甚至现在也有这个问题。每次我使用网络节流工具(GPRS 和常规 2G)模拟慢速连接时,都会发生这种情况
  • 我也可以在 Firefox v75.0 上确认此行为。

标签: firefox cdn cloudflare


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    TL;DR:在 Linux (RHEL 7.3) 上使用 Firefox 45.6.0 的类似问题已通过从 getfirefox.com 下载 60.0.2 得到解决。

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

    在我的情况下,我看到了同样的情况

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

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

    但是,Chromium 不受影响(lynx 和 curl 也是如此)。

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

    Mozilla 帮助页面上的每条建议也都失败了:没有代理、没有防病毒、安全模式、刷新配置文件、切换到全新的配置文件(也有伪造的 2014 证书,所以显然是硬编码的)、禁用硬件加速、禁用 DNS 预取和其他几个about:config hack。通过 yum 重新安装现有的 Firefox 版本也失败了,手动删除所有 sqlite 文件和storage/default 下的大多数相关站点也失败了(都在$HOME/.mozilla/firefox/&lt;profile&gt; 内)。甚至 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 二进制文件

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

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 2016-11-02
      • 2015-08-17
      • 2016-07-05
      • 2018-06-12
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多