Как я могу отключить проверку подписи для дополнений Firefox?

Начиная с версии 42, Firefox по умолчанию отказывается устанавливать неподписанные надстройки. Как отключить эту проверку?

7 ответов

Решение

Отключить проверку аддонов можно только в каналах Nightly и Developer. Другими словами, это невозможно в бета-версиях и стандартных выпусках.

  1. Идти к about:config (введите его в адресную строку)
  2. Задавать xpinstall.signatures.required в false,

Больше на https://wiki.mozilla.org/Addons/Extension_Signing

Отключите проверку подписи надстроек в релизных (всех) версиях 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.

  1. Найдите архив в каталоге установки Firefox.
  2. Извлеките этот файл в виде zip-архива в рабочую папку.
  3. Редактировать modules/AppConstants.jsmв текстовом редакторе и измените значение под MOZ_REQUIRE_SIGNINGиз falseк true
  4. Заархивируйте измененное содержимое обратно в omni.ja
  5. Подтвердите это 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. Он мгновенно включает все дополнения, которые не прошли проверку.

Другие вопросы по тегам