Как я могу отключить проверку подписи для дополнений Firefox?
Начиная с версии 42, Firefox по умолчанию отказывается устанавливать неподписанные надстройки. Как отключить эту проверку?
7 ответов
Отключите проверку подписи надстроек в релизных (всех) версиях Firefox
Первоначально я нашел это решение для отключения принудительной проверки подписи надстроек в этой записи блога, которая является исходным кодом (несколько измененного) кода в этом ответе. Внесение этих изменений позволит вам устанавливать неподписанные надстройки в профили, используя измененный вами дистрибутив Firefox. Для большинства людей это будет ваша основная установка Firefox. Однако, если вы установили несколько версий, вам нужно будет вносить эти изменения в каждую установку. Однако после внесения изменений они останутся через обычные обновления Firefox.
Вам нужно будет добавить пару файлов в каталог установки Firefox. Вы можете найти список примеров установочных каталогов для Windows, Linux и Mac OS на mozillaZine. Наиболее распространенные каталоги установки:
- Windows
- C: \ Program Files \ Mozilla Firefox \
- C: \ Program Files (x86) \ Mozilla Firefox \
- Linux
- / USR / Lib / firefox- <версия>
- OSX
- /Applications/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
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("SIGNED_TYPES.clear()");
Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {})
.eval("SIGNED_TYPES.clear()");
Результаты
В текущей версии Firefox я уже некоторое время использую это решение, чтобы установить несколько расширений, созданных для собственного использования, и для тестирования новых версий расширений, над которыми я работаю (когда я хочу проверить в Релиз версия вместо Firefox Developer Edition или Nightly).
ПРИМЕЧАНИЕ: в about:addons
Firefox может показывать (при некоторых условиях) надстройку как включенную (не выделенную серым цветом), но иметь текст, указывающий, что надстройка "не может быть проверена и была отключена". Текст не точный! Надстройка включена и работает.
Как это устроено
В resource://gre/modules/addons/XPIProvider.jsm
const SIGNED_TYPES
определяется как Set
, Чтобы надстройка требовала подписи, ее тип должен быть членом этого Set
, Set.prototype.clear()
Метод используется для очистки всех записей из Set
, Это приводит к отсутствию типов надстроек, которые требуют подписи ( код 1, код 2).
Если вы хотите, вы можете отключить проверку подписи для любого из типов: "webextension"
, "extension"
, "experiment"
, или же "apiextension"
,
Удалите каталог META-INF из любого модифицированного расширения
Дополнительные файлы в разделах выше отключают требование, чтобы расширения были подписаны. Если файлы подписи существуют, подпись все равно будет проверена. Таким образом, если вы изменили расширение, которое было подписано, и не удалили файлы подписи, расширение не пройдет проверку подписи. Другими словами, фактическая проверка любых существующих подписей является отдельным шагом от требования о том, что подпись должна существовать.
Если вы изменили расширение, которое было подписано (вы можете сказать, что оно было подписано существованием каталога META-INF в корневом каталоге расширения), вам потребуется удалить файлы сигнатур. Вы можете сделать это, удалив каталог META-INF и все файлы, содержащиеся в этом каталоге.
1. Код в блоге помещает этот вызов в try{}catch(){}
блок. Там действительно нет необходимости делать это. Единственная эффективная вещь, которая делает это, - предотвращает сообщение об ошибке в консоли браузера (Ctrl- Shift- J или Cmd- Shift- J в OSX). Там нет никакого дополнительного кода, который желательно запустить в случае сбоя. Кроме того, я предпочел бы иметь возможность видеть ошибку в консоли браузера, если это не удается, чтобы знать, что на самом деле произошел сбой. Не имея try{}catch(){}
не имеет никаких негативных последствий и позволяет отследить проблему, если в какой-то будущей версии Firefox дополнения начнут отключаться из-за отсутствия подписи.
Чтобы завершить ответ выше, я обнаружил firefox-autoconfig, который состоит из установки autoconfig.js
файл в <FIREFOX INSTALLATION DIR>/default/prefs
и ci.clg
файл в <FIREFOX INSTALLATION DIR>
это способ отключить xpinstall.signatures.required
(и другие опции тоже) окончательно и автоматически при открытии Firefox (протестировано с Firefox 45.0.1)
Вы увидите это содержимое в autoconfig.js
:
//
pref("general.config.filename", "ci.cfg");
pref("general.config.obscure_value", 0);
И это содержание в ci.cfg
:
// Disable checking if firefox is default browser
lockPref('browser.shell.checkDefaultBrowser', false);
// Disable restoring session
lockPref('browser.sessionstore.resume_from_crash', false);
// Disable extension signature check
lockPref('xpinstall.signatures.required', false);
// Allow extensions to be installed without user prompt
pref("extensions.autoDisableScopes", 0);
pref("extensions.enabledScopes", 15);
// Disable updater
lockPref("app.update.enabled", false);
// make absolutely sure it is really off
lockPref("app.update.auto", false);
lockPref("app.update.mode", 0);
lockPref("app.update.service.enabled", false);
// Prevent closing dialogs
lockPref("browser.showQuitWarning", false);
lockPref("browser.warnOnQuit", false);
lockPref("browser.tabs.warnOnClose", false);
lockPref("browser.tabs.warnOnCloseOtherTabs", false);
// Disable Add-ons compatibility checking
clearPref("extensions.lastAppVersion");
// Don't show 'know your rights' on first run
pref("browser.rights.3.shown", true);
//Disable plugin checking
lockPref("plugins.hide_infobar_for_outdated_plugin", true);
clearPref("plugins.update.url");
// Disable health reporter
lockPref("datareporting.healthreport.service.enabled", false);
// Disable all data upload (Telemetry and FHR)
lockPref("datareporting.policy.dataSubmissionEnabled", false);
// Disable crash reporter
lockPref("toolkit.crashreporter.enabled", false);
Components.classes["@mozilla.org/toolkit/crash-reporter;1"].getService(Components.interfaces.nsICrashReporter).submitReports = false;
// Browser Console command line
pref("devtools.chrome.enabled", true);
Начиная с Firefox 47: выпуск и бета-версии Firefox для рабочего стола не позволяют устанавливать неподписанные расширения без переопределения.
Для получения дополнительной информации см. Вики-страницу Mozilla на подписи расширений.
Решение @Makyen работает, но полностью отключит проверку подписи:
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("SIGNED_TYPES.clear()");
У вас не будет информации о том, подписано ли дополнение.
Вместо этого я бы предложил это:
/* Let unsigned addons live! */
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("function mustSign(aType) { return false; }");
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("XPIProvider.verifySignatures = function() {}");
Он по-прежнему будет предупреждать вас, когда вы попытаетесь установить неподписанное дополнение, но все равно будет работать. Аддон помечен как отключенный в about:addons
но на самом деле активен (вы можете отключить / включить его вручную, как обычный аддон).
Как это устроено:
mustSign()
проверяет, требуется ли подпись для этого типа аддона.verifySignatures()
это обратный вызов, используемый для проверки подписей каждыйXPI_SIGNATURE_CHECK_PERIOD
секунд (т.е. один раз в день)
Я обнаружил, что более простой подход, который, похоже, работает, заключается в переворачивании константы, которую Firefox использует для определения необходимости принудительной подписи. Скорее всего, это нужно будет делать после каждого обновления Firefox.
- Найдите архив в каталоге установки Firefox.
- Извлеките этот файл в виде zip-архива в рабочую папку.
- Редактировать
modules/AppConstants.jsm
в текстовом редакторе и измените значение подMOZ_REQUIRE_SIGNING
изfalse
кtrue
- Заархивируйте измененное содержимое обратно в
omni.ja
- Подтвердите это
xpinstall.signatures.required
а такжеxpinstall.whitelist.required
ложны подabout:config
, и перезапустите фаерфокс
Теперь ваши неподписанные дополнения должны быть установлены.
Это код, который я нашел в теме на HackerNews, касающейся подписи дополнений apocalypse. Он работает в Firefox 56 и более старых версиях без перезагрузки.
// For FF < v57 >...?
async function set_addons_as_signed() {
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm");
Components.utils.import("resource://gre/modules/AddonManager.jsm");
let XPIDatabase = this.XPIInternal.XPIDatabase;
let addons = await XPIDatabase.getAddonList(a => true);
for (let addon of addons) {
// The add-on might have vanished, we'll catch that on the next startup
if (!addon._sourceBundle.exists())
continue;
if( addon.signedState != AddonManager.SIGNEDSTATE_UNKNOWN )
continue;
addon.signedState = AddonManager.SIGNEDSTATE_NOT_REQUIRED;
AddonManagerPrivate.callAddonListeners("onPropertyChanged",
addon.wrapper,
["signedState"]);
await XPIProvider.updateAddonDisabledState(addon);
}
XPIDatabase.saveChanges();
}
set_addons_as_signed();
Этот код необходимо выполнить в консоли браузера (а не в веб-консоли), к которой можно получить доступ с помощью сочетания клавиш Ctrl + Shift + J. Он мгновенно включает все дополнения, которые не прошли проверку.