Mozilla用于签署附加组件的中间签名证书已过期。这导致Firefox将使用该证书签名的附加组件视为不可信任。该问题正在Bugzilla 1548973和Mozilla博客上进行跟踪。
对于那些选择不升级到当前版本的Firefox或Firefox ESR的用户,Mozilla计划发布一个适用于Firefox 52至65版本的更新。计划是它将是一个用户可安装的扩展程序。预期他们会在有更多信息可用时更新他们的博文。这是截止到5月8日19:28 EDT的所有可用信息。
要在Windows或MacOS上更新您的Firefox版本,请点击右上角的菜单,然后选择"帮助",接着选择"关于Firefox"。然后更新应该会自动下载,并在您重新启动Firefox时应用。
并非所有Linux上的软件包管理器都已经发布了新版本。如果您的发行版的软件包管理器没有可用的更新,那么您可能需要采取手动更新(使用您偏好的方法)或尝试下面的解决方案之一。
【注意:下面的修复需要您启用“研究”,这将允许Mozilla自动下载代码以在受影响的Firefox配置文件中运行(大多数用户只有一个配置文件)。此外,它要求您允许“允许Firefox向Mozilla发送技术和交互数据”。如果由于隐私问题您已关闭了这些选项,请考虑是否要执行此操作。您不必一直保持这些设置启用,但您需要启用它们以允许修复此问题的研究运行。“对于那些不想启用“研究”和向Mozilla报告数据的人,请参见解决方案3(以下;解决方案2默认情况下会向Mozilla和他们的合作伙伴发送数据)。使用该研究(解决方案1)通过替代方案3(直接下载)进行安装可能不会打开向Mozilla报告的功能,但我尚未对此进行测试。】
Mozilla在Release、Beta和Nightly的桌面用户中有一个解决方案,如果您启用了"Studies"。来自 Mozilla博客,作者 Kev Needham,根据 CC BY-SA 3.0许可发布的文章。如果您启用了研究功能,Firefox可能需要最多6个小时才能检查这些新的研究。
用户David在博客评论中提出了以下建议,以便使Firefox更快地检查研究:
如果您暂时更改
about:config
中的“app.normandy.run_interval_seconds
”值,并重新启动,然后在事情开始正常后将其改回21600
(六小时),则可以将六小时的等待时间缩短到几秒钟。
我建议您不要将其设置为低于60
秒。可以确定自从上次Firefox检查研究以来已经超过1分钟了,否则您早就安装了这些研究。使用类似60的数字将为您提供足够的时间来安装研究,并将数字设置回21600
,而无需让Firefox持续检查研究。只需准备好在安装研究后将其改回21600
,然后重新启动Firefox。
我尝试从另一个配置文件中复制研究/补丁。手动将研究/补丁文件添加到另一个配置文件中没有起作用。以这种方式加载它会被识别为常规扩展。然而,它似乎使用WebExtension Experiments,而在Firefox发布版本中对普通扩展未启用。
很可能可以修改配置文件目录中的配置文件以使其工作(它们大多是JSON格式)。然而,我并没有深入研究它,找出需要的内容。
看起来您可以通过直接访问用于下载的URL来直接安装主要的“研究”。我最初在Mozilla博客文章中看到了Samuel Vuorela在hotfix-update-xpi-intermediate@mozilla.com.xpi这个评论中提供的URL。
Machavity在这个问题上有一个答案,描述了他从该URL下载研究的经历,并详细介绍了在Mozilla的研究源中可以找到该URL的位置。正是他的答案让我尝试直接下载它,所以如果你觉得直接安装URL有帮助,请给他的答案点赞。在那个答案中描述了直接下载/安装研究*.xpi文件是可行的,但这样做不会使修复补丁显示在研究列表或附加组件列表中。如果Firefox后来通过研究更新下载它,它将显示为一项研究。
上述URL下载的内容与通过正常“研究”源安装后存储在扩展目录中的hotfix-update-xpi-intermediate@mozilla.com.xpi文件完全匹配。查看浏览器控制台表明,直接从下载安装并不会出现手动安装先前下载副本的*.xpi所具有的问题(即它没有使通过替代方案2安装变得无法使用的相同问题)。about:config
中将xpinstall.signatures.required
设置为false
。这将禁用扩展签名测试。Firefox允许您在一台计算机上同时安装多个版本的Firefox。就我个人而言,我安装了几个版本。一个相对简单的解决方案是安装开发者版,并将xpinstall.signatures.required
设置为false
。然后,您可以使用开发者版几天,直到Mozilla解决和修复整个问题。然后,您可以通过运行该版本切换回使用Firefox发布版。
在Mac或Windows上,将xpinstall.signatures.required
设置为false
不起作用于Beta或发布版本的Firefox。这样做没有效果。在Linux上,根据您的发行版,该设置可能会被遵守,并且在某些发行版的Firefox发布版本上起作用。
about:config
中将toolkit.legacyUserProfileCustomizations.stylesheets
设置为true
。如果它不存在,则需要创建它(右键单击上下文菜单中的“新建”)作为布尔选项。有关此选项的添加的更多详细信息,请参见Bugzilla 1541233。try
/ catch
块中,但我对此不太确定。
如果你在about:config
中将javascript.enabled
设置为false
,这将无效。该配置选项的默认值为true
,因此除非你专门禁用了它,否则应该没问题。
我们将使用一种技术,允许你从存储在Firefox个人配置目录中的文件中在浏览器上下文中运行任意JavaScript代码。我从Haggai Nuchi的GitHub存储库:适用于Firefox Quantum的userChrome.js找到了如何做到这一点的方法。该代码在Firefox启动时运行一次,然后每次打开新窗口都会再次运行。
在Windows上,你的Firefox个人配置目录将是%appdata%\Mozilla\Firefox\Profiles\[profileID]
。如果你只有一个配置文件,[profileID]
将是%appdata%\Mozilla\Firefox\Profiles
目录中唯一的目录。如果你有多个配置文件,你需要选择要将此黑客安装到哪个配置文件中。
chrome
的文件夹。你将把下面的两个文件添加到该文件夹中:
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>
about:addons
手动启用它们。您可以通过将*.xpi文件拖放到Firefox窗口上并确认您要安装,或者转到Mozilla Add-ons上的附加组件页面来安装它们。然后,你需要将以下代码添加为文件<安装目录>/defaults/pref/disable-add-on-signing-prefs.js
(Windows:<安装目录>\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");
您还需要将以下代码添加为文件<安装目录>/disable-add-on-signing.js
(Windows: <安装目录>\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"
。about:config
中的javascript.enabled
未设置为False
时,解决方案3才有效。当Mozilla于2019年5月4日停用所有附加组件时,我临时禁用了Javascript以防止加载令人不快的、通常被阻止的内容 - 然后发现这样做也导致解决方案3无法工作。 - dbc中间代码签名证书已过期。这意味着所有使用该证书签名的附加组件将不再受信任。在这种情况下,浏览器正在执行其工作。
Mozilla将需要重新对附加组件进行签名和/或发布新的证书。目前正在进行修复工作。目前没有解决方案,除非您使用开发人员代码分支,您可以进入about:config
并将xpinstall.signatures.required
设置为false
。
对于大多数用户来说,这将无效,并且如果您不将其设置回来,可能会使您面临一些安全风险。最好的选择是等待修复。我想他们会在几个小时内解决这个问题。
about:config
并将xpinstall.signatures.required
设置为false。我找到了另一种获取热修复程序的方法。这与上面提到的修复程序相同,但是尝试通过调整设置来下载Studies失败了,因此我找到了一个GitHub问题,描述了另一种安装热修复程序的方法。
about:studies
中(将其放入URL栏中以查看所有研究),你可以确实删除它。因此,所有这些只是更快地使修复程序进入Firefox,但请务必启用研究如Makyen的回答中所述。虽然接受的答案提到了量子之前的版本(FF <57),但对我来说没有起作用(我正在使用的是Firefox ESR-52.9)。经过几个小时的研究,我成功解决了这个问题。以下是我解决方法:
总体上,解决方案有三个步骤:
当然,在进行操作之前,您应该备份您的配置文件。
从Mozilla下载热补丁。 https://storage.googleapis.com/moz-fx-normandy-prod-addons/extensions/hotfix-update-xpi-intermediate@mozilla.com-1.0.2-signed.xpi
解压缩它(.xpi实际上是.zip文件),并打开{提取的文件夹}/experiments/skeleton/api.js。
从.js文件中,复制base64编码的中间证书,并粘贴到新的文本文件中。证书看起来像下面这样。只需复制双引号("")之间的字符串(MII...那一段)
let intermediate = "MII...
解码base64编码的证书并保存为.der格式的证书。
进入选项-高级-证书-颁发机构,将证书安装为CA,并信任其以识别软件开发者。
打开您的个人资料页面并删除extensions.json、extensions.ini文件。注意:这将重置您的附加组件启用/安装状态!在执行此步骤之前备份您的个人资料。
重新启动FF并检查问题是否已解决。
To provide this fix on short notice, we are using the Studies system. This system is enabled by default, and no action is needed unless Studies have been disabled. Firefox users can check if they have Studies enabled by going to:
Firefox Options/Preferences -> Privacy & Security -> Allow Firefox to install and run studies (scroll down to find the setting)
xpinstall.signatures.required
。给他们几天时间发布修复程序,然后重新启用它。我似乎没有丢失任何设置。 - Daniel