答案1
问题
Mozilla 用于签署附加组件的中间签名证书已过期。这导致 Firefox 认为使用该证书签名的附加组件不受信任。此问题正在跟踪中Bugzilla 1548973以及Mozilla 的博客。
解决方案 0:将 Firefox 更新至 66.0.5+ 或 60.6.3+ ESR
Mozilla 发布了适用于桌面和 Android 的 Firefox 66.0.5和60.6.3 ESR,”其中包括重新启用自 5 月 3 日开始被禁用的附加组件的永久修复。“建议您将 Firefox 更新到最新版本。此更新将取代研究,这意味着如果您仅启用“研究”来获得此修复,您可以在更新到当前版本的 Firefox 后再次禁用它们。
对于没有选择更新到当前版本的 Firefox 或 Firefox ESR 的用户,Mozilla 计划发布适用于 Firefox 52 至 65 版本的更新。计划是将其作为用户可安装的扩展。预期他们将更新其博客文章待有更多信息可用时。以上是截至 5 月 8 日 19:28 EDT 可用的全部信息。
要在 Windows 或 MacOS 上更新 Firefox 版本,请点击右上角的菜单,然后选择“帮助”,接着选择“关于 Firefox”。更新将自动下载,并在您重新启动 Firefox 时应用。
Linux 上并非所有软件包管理器都已发布新版本。如果您的发行版的软件包管理器没有可用更新,那么您可能不得不采取手动更新(使用您喜欢的方法)或尝试以下解决方案之一。
解决方案 0.5:对于那些不想更新的人
截至 2019-05-14,Mozilla 的博客列出了可以为不想更新的旧版本 Firefox 用户安装的扩展(强调添加):
解决方案 1:大多数桌面用户的自动解决方案:“Studies”
[注意:以下修复要求您启用“研究”,这允许 Mozilla 自动下载代码以在受影响的配置文件(大多数用户只有一个配置文件)中的 Firefox 上运行。此外,它还要求您启用“允许 Firefox 向 Mozilla 发送技术和交互数据”。如果您出于隐私问题而关闭了这些功能,您应该考虑是否要这样做。您不必让这些设置保持启用状态,但您需要启用它们以允许修复此问题的研究运行。对于不想启用“研究”和向 Mozilla 报告数据的用户,请参阅解决方案 3(见下文;解决方案 2 默认会将数据发送给 Mozilla,有时还会发送给其合作伙伴)。使用替代方案 3(直接下载)安装研究(解决方案 1)大概没有打开向 Mozilla 报告的功能,但我还没有对此进行测试。]
如果您启用了“研究”,Mozilla 已为 Release、Beta 和 Nightly 版的桌面用户修复了该问题。Mozilla 的博客,作者凯文·尼德汉姆,许可依据版权声明::
修复将在接下来的几个小时内在后台自动应用。无需采取任何主动措施即可使附加组件再次运行。
请注意:此修复不适用于 Firefox ESR 或 Firefox for Android。我们正在努力为两者发布修复程序,并将提供更新这里以及社交媒体。
为了在短时间内提供此修复,我们使用了研究系统。此系统默认启用,除非已禁用研究,否则无需采取任何措施。Firefox 用户可以通过以下方式检查他们是否已启用研究:
- Firefox 选项/首选项 -> 隐私和安全 -> 允许 Firefox 安装并运行研究(向下滚动找到设置)
- 重新启用附加组件后,可以再次禁用研究
该研究可能需要长达六个小时才能应用于 Firefox。要检查修复是否已应用,您可以在地址栏中输入“about:studies”。如果修复已启用,您将看到“hotfix-update-xpi-signing-intermediate-bug-1548973”,如下所示:
您还可能会看到列出的“hotfix-reset-xpi-verification-timestamp-1548973”,它是修复的一部分,可能位于“活跃研究”或“已完成的研究”部分。
Mozilla 正在开发一个不需要研究系统的修复程序。他们知道有些用户报告说,即使安装了上述两个研究,他们的扩展仍然处于禁用状态。该问题正在跟踪中错误 1549078。
更快地安装研究
如果您启用了研究,Firefox 可能需要最多 6 个小时来检查这些新的研究。
选项 1:设置 Firefox 以更快地检查研究
用户 David 在在博客上发表评论建议采取以下措施,使 Firefox 能够更快地检查研究:
app.normandy.run_interval_seconds
如果您暂时更改中“ ”的值,重新启动,然后在一切正常后将about:config
其改回(六小时),那么六小时的等待时间就可以缩短到几秒钟。21600
我建议你不要将其设置为低于60
10 ...21600
21600
替代方案 2:(不起作用)创建一个启用研究的新个人资料,并将研究复制到您的主个人资料
我尝试从另一个配置文件复制研究/修补程序。手动将研究/修补程序文件添加到另一个配置文件不起作用。以这种方式加载时,它被识别为常规扩展。但是,它似乎使用Web扩展实验,该功能在 Firefox 发行版中的常规扩展中未启用。
可能需要修改配置文件目录中的配置文件才能使其正常工作(它们大多是 JSON)。但是,我没有深入研究它以弄清楚需要什么。
方法 3:直接下载研究
似乎你可以直接进入下载的 URL 来安装主要的“研究”。我第一次看到的 URL 是[电子邮件保护]在此评论由 Samuel Vuorela 在 Mozilla 博客文章中撰写。
Machavity 对这个问题有答案描述了他从该 URL 下载研究的经验,并更详细地描述了在 Mozilla 的研究提要中可以找到该 URL 的位置。他的回答让我尝试直接下载,因此如果您发现直接安装 URL 有用,请为他的回答点赞。在该回答中,他描述了虽然直接下载/安装研究 *.xpi 文件是可行的,但这样做不会导致修补程序显示在研究列表或附加组件列表中。如果 Firefox 稍后通过其研究更新下载它,它将显示为一项研究。
上述 URL 的下载内容与[电子邮件保护]通过常规“研究”源安装后,存储在扩展目录中的文件。查看浏览器控制台表示直接从下载安装不是出现与从先前下载的副本手动安装 *.xpi 相同的问题(即,它没有同样的问题,导致通过替代方案 2 安装时无法运行)。
解决方案 2:使用开发者版或 Nightly 版并禁用签名检查(据报道,在 Debian 和 Ubuntu 16.04 以及 Firefox 版本 66.0.3 中也可以使用)
如果您安装Firefox 开发者版本或者Firefox Nightly您about:config
可以设置xpinstall.signatures.required
为false
。这将禁用扩展签名测试。
Firefox Nightly 是 Firefox 开发的最新夜间版本。仅当您愿意忍受可能存在的任何错误时才推荐使用它。
开发者版和 Nightly 都会向 Mozilla(有时也是我们的 [Mozilla] 合作伙伴)发送数据,以帮助我们 [Mozilla] 处理问题并尝试想法。了解共享的内容“”。
Firefox 允许您在一台机器上同时安装多个版本的 Firefox。就我个人而言,我安装了多个版本。一个相当简单的解决方案是安装开发版并设置xpinstall.signatures.required
为false
。然后,您可以使用开发版几天,直到 Mozilla 解决并修复整个问题。然后,您只需运行该版本即可返回使用 Firefox 的发布版。
设置xpinstall.signatures.required
为false
将不是在 Mac 或 Windows 上,Firefox 的 Beta 版或 Release 版均可使用。这样做没有效果。在 Linux 上,根据您的发行版,此设置可能会被遵守,并且在某些发行版的 Firefox 发行版上有效。
解决方案 3:禁用发布/测试版的签名检查
首选解决方案是使用上面提到的“研究”。但是,如果这对您不起作用,您可以通过禁用签名检查来解决这个问题。
签名检查是一项安全功能。禁用该功能会降低 Firefox 的安全性。一旦 Mozilla 获得他们的证书问题已解决,建议您删除此代码以重新启用签名检查。安装此代码以禁用签名检查后,您应该小心,只安装您完全信任的扩展程序(例如托管在Mozilla 附加组件)。
注意:本答案的其余部分最初是从我的回答中复制而来的如何禁用 Firefox 附加组件的签名检查?在 Stack Overflow 上,但是它被稍加修改了。
在 Firefox 的发布(所有)版本中禁用附加组件签名检查
Firefox 版本 66+(可能是 60+)
以下说明将禁用 Firefox 中安装文件的 Firefox 配置文件的签名检查。您将向铬合金Firefox 配置文件目录下的目录。
我已经在 Firefox 66.0.3+ 上测试过。
从 Firefox 69 开始,除了以下说明之外,预计您还需要在 中toolkit.legacyUserProfileCustomizations.stylesheets
设置为。如果它不存在,则需要将其创建(右键单击上下文菜单中的“新建”)为布尔选项。请参阅true
about:config
Bugzilla 1541233有关添加此选项的更多详细信息。
据我所知,Firefox 65 需要一些略有不同的代码。我相信当我为 Firefox 66 修改它时,我将该代码留在了try
/catch
块中,但我不确定。
如果您已在 中javascript.enabled
设置为,则此操作将不起作用。该配置选项的默认值为,因此除非您特意禁用它,否则应该没问题。false
about:config
true
我们将使用一种技术,它允许你从存储在 Firefox 配置文件目录中的文件中在浏览器上下文中运行任意 JavaScript 代码。我找到了如何做到这一点的方法Haggai Nuchi 的 GitHub 存储库:与 Firefox Quantum 兼容的 userChrome.js。此代码在 Firefox 启动时运行一次,然后每次打开新窗口时再次运行。
在 Windows 上,您的 Firefox 配置文件目录将是%appdata%\Mozilla\Firefox\Profiles\[profileID]
。如果您只有一个配置文件,则[profileID]
将是%appdata%\Mozilla\Firefox\Profiles
目录中的唯一目录。如果您有多个配置文件,则需要选择要安装此 hack 的配置文件。
进入配置文件目录后,chrome
如果目录不存在,则需要创建一个名为的目录。您将向该目录添加以下 2 个文件:
userChrome.css
userChrome.xml
然后你需要以下代码userChrome.css
,可从 Haggai Nuchi 的 GitHub 存储库获取:
/*Enable userChrome.js */ /* Copyright (c) 2017 Haggai Nuchi Available for use under the MIT License: https://opensource.org/licenses/MIT */ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); toolbarbutton#alltabs-button { -moz-binding: url("userChrome.xml#js"); }
你需要userChrome.xml
(从版本可在 Haggai Nuchi 的 GitHub 存储库中找到):
<?xml version="1.0"?>
<!-- Copyright (c) 2017 Haggai Nuchi
Available for use under the MIT License:
https://opensource.org/licenses/MIT
-->
<!-- This has been modified from the version available from
https://github.com/nuchi/firefox-quantum-userchromejs/blob/master/userChrome.xml
to include code by Makyen to disable add-on signing. If you want to load an additional JavaScript
file of your own, please see the original file by Haggai Nuchi.
This modified version is released under both the MIT and CC BY-SA 3.0 licenses.
-->
<bindings id="generalBindings"
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xbl="http://www.mozilla.org/xbl">
<binding id="js" extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-badged">
<implementation>
<constructor><![CDATA[
//Worked on FF65 and lower. The 3 different resources are used in different versions of FF.
try {
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(e) {}
try {
Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(e) {}
try {
Components.utils.import("resource://gre/modules/addons/XPIDatabase.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(e) {}
//Tested on Firefox 66
try {
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
XPIDatabase: "resource://gre/modules/addons/XPIDatabase.jsm",
});
XPIDatabase.SIGNED_TYPES.clear();
console.log('Add-on signing disabled.');
} catch(e) {
console.error(e);
}
]]></constructor>
</implementation>
</binding>
</bindings>
在您的个人资料中添加这两个文件后铬合金目录,则需要重新启动 Firefox。您可以通过在浏览器控制台(在 FF66+ 中;控制台输出可能无法显示在早期版本的 Firefox 中)。
被 Firefox 禁用或删除的附加组件可能无法自动启用。您可能需要重新安装它们,或者至少从 手动启用它们about:addons
。您可以通过将 *.xpi 文件拖放到 Firefox 窗口并确认要安装来安装它们,或者转到附加组件的页面Mozilla 附加组件。
如果你想从以下位置获取任何特定扩展的 *.xpi 文件Mozilla 附加组件您可以通过右键单击“安装”按钮并选择“另存为”或“删除”来下载它。
Firefox 版本 < 57 (左右)
如果你对 FF<57 有问题,请参阅我对“如何禁用 Firefox 附加组件的签名检查?”的回答在 Stack Overflow 上。我相信我已经吸收了该问题评论中的所有内容,但评论描述了其他人遇到的一些问题。
不幸的是,我不记得这个方法在哪个版本的 Firefox 上失效了。我知道我在 Firefox 54、55、52ESR 和 FF56.* 上用过它。
我最初发现这个解决方案可以禁用强制附加组件签名检查这篇博文,这是本答案中(略有修改的)代码的原始来源。进行这些更改将允许您使用您修改的 Firefox 发行版将未签名的附加组件安装到配置文件中。对于大多数人来说,这将是您的主要 Firefox 安装。但是,如果您安装了多个版本,则需要在每个安装中进行此修改。但是,一旦您进行了修改,它们将通过正常的 Firefox 更新保留下来。
您需要在 Firefox 安装目录中添加几个文件。您可以找到mozillaZine 上适用于 Windows、Linux 和 Mac OS 的安装目录示例列表. 最常见的安装目录是:
- 视窗
- C:\Program Files\Mozilla Firefox\
- C:\Program 文件 (x86)\Mozilla Firefox\
- Linux
- /usr/lib/firefox-<版本>
- OSX
- /应用程序/Firefox.app
添加第一个文件
然后您需要添加以下代码作为文件<Install directory>/defaults/pref/disable-add-on-signing-prefs.js
(Windows <Install directory>\defaults\pref\disable-add-on-signing-prefs.js
:):
//This file should be placed in the defaults/pref directory (folder)
//within the Firefox installation directory with the with the name:
// disable-add-on-signing-prefs.js
pref("general.config.obscure_value", 0);
pref("general.config.filename", "disable-add-on-signing.js");
添加第二个文件
您还需要将以下代码添加为文件<Install directory>/disable-add-on-signing.js
(Windows <Install directory>\disable-add-on-signing.js
:):1
//This file should be placed in the Firefox installation directory
//(folder) with the with the name:
// disable-add-on-signing.js
try {
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("SIGNED_TYPES.clear()");
} catch(e) {}
try {
Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {})
.eval("SIGNED_TYPES.clear()");
} catch(e) {}
结果
在当前发布的 Firefox 版本中,我已经使用此解决方案安装了几个我自己构建的扩展,并测试了我正在开发的扩展的新版本(当我想在发布版本代替Firefox 开发者版本或者每晚)。
笔记:在about:addons
Firefox中可能在某些情况下,显示该插件已启用(不是灰色),但显示文本表明该插件“无法验证,已被禁用”。文本不准确!该插件已启用并正常运行。
怎么运行的
[这是对旧代码的解释,但当前代码非常相似。]
之内resource://gre/modules/addons/XPIProvider.jsm
被const SIGNED_TYPES
定义为Set
。为了使附加组件需要签名,其类型必须是该 的成员Set
。Set.prototype.clear()
方法用于清除 中的所有条目Set
。这会导致没有需要签名的附加组件类型(代码 1,代码 2)。
如果您愿意,您可以单独禁用以下任何类型的签名检查:"webextension"
、、或。"extension"
"experiment"
"apiextension"
答案2
中间代码签名证书已过期。这意味着使用该证书签名的所有附加组件都不再受信任。在这种情况下,浏览器正在执行其工作。
Mozilla 需要重新签发附加组件并/或推出新证书。正在努力修复此问题。目前尚无解决方案,除非您位于开发人员代码分支中,您可以进入该分支about:config
并将其设置xpinstall.signatures.required
为false
。
这对于大多数用户来说不起作用,如果您不将其恢复,可能会给您带来一些安全风险。最好的选择是等待。我想他们会在几个小时内解决这个问题。
答案3
此问题是由于大量附加证书过期造成的。正如其他人提到的,正在修复中。
要暂时重新启用附加组件,您可以导航到about:config
并设置
xpinstall.signatures.required
为 false。
这将重新启用已安装的所有证书已过期的附加组件,但不建议长期保持启用状态。我建议问题解决后立即将其关闭。
答案4
虽然接受的答案提到了量子之前的版本(FF <57),但它对我来说不起作用(我使用的是 Firefox ESR-52.9)。经过几个小时的研究,我设法解决了这个问题。以下是我所做的:
抽象的
抽象来说,解决方案分为三个步骤:
- 获得更新的证书
- 安装更新的证书
- 重置附加组件状态
当然,在继续之前您应该备份您的个人资料。
细节
从 mozilla 下载修补程序。 https://storage.googleapis.com/moz-fx-normandy-prod-addons/extensions/[电子邮件保护]
解压它(.xpi 就是 .zip),然后打开里面的{解压文件夹}/experiments/skeleton/api.js。
从 .js 文件中,复制 base64 编码的中间证书并粘贴到新的文本文件中。证书如下所示。只需复制双引号(“”)字符串(MII... 东西)
let intermediate = "MII...
解码 base64 编码的证书并保存为 .der 证书。
转到选项-高级-证书-颁发机构并将证书安装为 CA。信任它来识别软件开发人员。
打开你的个人资料页面并删除extensions.json和extensions.ini。 注意:它将重置您的附加组件启用/安装状态!在继续此步骤之前,请备份您的个人资料。
重新启动 FF 并检查问题是否解决。