Сегодня перестали работать все дополнения Firefox
Раздел(ы): FireFox, Программное обеспечение
Просмотры: 2323
Комментарии: 1
Сегодня 4 мая 2019 пришла беда от куда не ждали: перестали работать все дополнения FireFox. Попытка переустановить любое из них оканчивается неудачей.
Если зайти в меню дополнения (Ctrl+Shift+A) то можно увидеть примерно следующее предупреждение, что ваши расширения устаревшие, отключены и не поддерживаются:

Итог: сдохли все расширения.
А причина кроется в том, что все дополнения к Firefox отключены из-за истечения срока сертификата Mozilla. Кроме того, отмечается невозможность установки новых дополнений из официального каталога AMO (addons.mozilla.org).
Официального решения пока нет, но к счастью есть несколько временных «костылей», которые позволяют пользоваться браузером Firefox и его дополнениями как прежде.
Обязательная проверка дополнений Firefox по цифровым подписям была введена в апреле 2016 года. По мнению Mozilla проверка по цифровой подписи позволяет блокировать распространение вредоносных и шпионящих за пользователями дополнений.
Решение 1 — отключаем проверку цифровых сертификатов у дополнений браузера Firefox
Следующее решение я протестировал на FireFox 66.0.3 x64 для Windows.
Чтобы восстановить работу дополнений (расширений) FireFox найдите профиль FireFox на вашем компьютере, обычно он находится здесь: 
Зайдите в папку профиля и создайте в ней каталог chrome.
В этом каталоге создайте три файла (disable-add-on-signing.js, userChrome.css, userChrome.xml) со следующем содержимым:

disable-add-on-signing.js
//This should be installed as the file disable-add-on-signing.js in
//  your profile's "chrome" directory.
//Earlier versions of Firefox
try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}
try {
    Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}
try {
    Components.utils.import("resource://gre/modules/addons/XPIDatabase.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}
//Tested on Firefox 66
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.');
userChrome.css
/*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
<?xml version="1.0"?>
<!-- Copyright (c) 2017 Haggai Nuchi
Available for use under the MIT License:
https://opensource.org/licenses/MIT
 -->
<!-- This has been slightly modified from the version available from
https://github.com/nuchi/firefox-quantum-userchromejs/blob/master/userChrome.xml
by Makyen. The 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[
            function makeRelativePathURI(name) {
              let absolutePath = Components.stack.filename;
              return absolutePath.substring(0, absolutePath.lastIndexOf("/") + 1) + name;
            }
            // The following code executes in the browser context,
            // i.e. chrome://browser/content/browser.xul
            try {
                Services.scriptloader.loadSubScript(makeRelativePathURI("disable-add-on-signing.js"), window);
            } catch(e) {
                console.error(e);
            }
        ]]></constructor>
    </implementation>
  </binding>
</bindings>
После того как вы добавили эти три файла в директорию chrome вам необходимо перезапустить браузер FireFox.
Затем зайдите в консоль браузера (Ctrl+Shift+J) и убедитесь, что проверка цифровых подписей отключена:

Это значит, что наш «костыль» работает.
Но к сожалению, заблокированные расширения автоматически не восстановят свою работу и вам нужно будет установить их вновь (https://addons.mozilla.org/ru/firefox/).
Внимание! Это временное решение пока в Mozilla не исправят ошибку. Так как цифровая подпись теперь не проверяется, то ставьте только проверенные расширения которыми вы пользовались ранее до сегодняшнего дня.
Решение 2 — скрипт реактивации расширений
В начале проверьте на странице about:config, что значение devtools.chrome.enabled находится в состоянии TRUE

Затем перейдите на служебную вкладку about:addons с неработающими расширениями, нажмите клавишу [F12] и вставьте следующий скрипт в консоль:

Скрипт реактивации заблокированный расширений FireFox:
// Re-enable *all* extensions
 
    async function set_addons_as_signed() {
        Components.utils.import("resource://gre/modules/addons/XPIDatabase.jsm");
        Components.utils.import("resource://gre/modules/AddonManager.jsm");
        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 XPIDatabase.updateAddonDisabledState(addon);
 
        }
        XPIDatabase.saveChanges();
    }
 
    set_addons_as_signed();
Не забудьте нажать [Enter].
Все заблокированные дополнения должны автоматически заработать без перезагрузки браузера. Правда выполнять эту процедуру вам скорее всего придется каждый день (каждые 24 часа, раз в сутки).
Проверено на Firefox 66.0.3 x64 для Windows.
Решение 3 — установка ночных и иных свежих сборок FireFox
Говорят, что в свежих сборках FireFox (не релизных) вышеописанную ошибку уже исправили и вы можете не дожидаясь официального выпуска скачать версию 66.0.4 release candidates.
Привожу ссылки на русские версии:
х32 — https://ftp.mozilla.org/pub/firefox/candidates/66.0.4-candidates/build3/win32/ru/
x64 — https://ftp.mozilla.org/pub/firefox/candidates/66.0.4-candidates/build3/win64/ru/
Я этот способ не проверял.
Выводы
Какое решение лучше использовать пока в Mozilla не выкатили новую версию браузера Firefox в котором все дополнения работают нормально?
Самое простое решение — это скачать и установить предрелизную версию, в ней расширения должны работать нормально.
Способ номер 2 хорош тем, что автоматически возвращает к жизни все ваши дополнения к браузеру Firefox. Но скорее всего вам придется запускать этот скрипт каждый день пока не выйдет официальное стабильное обновление браузера.
Способ номер 1 удаляет обязательную проверку сертификатов, что позволяет полноценно работать с дополнениями, но все расширения придется установить заново.
Думаю хорошим вариантом будет использовать варианты 2 и 1 вместе. Сначала вернуть к жизни все ранее установленные дополнения (вариант 2), а потом отключить проверку сертификатов (вариант 1). После чего можно спокойно ждать обновление Firefox с исправленным багом.
Благодарности
При написании статьи были использованы следующие источники:
- Firefox 54 сдохли все расширения
- Все дополнения к Firefox отключены из-за истечения срока сертификата Mozilla
- All extensions disabled due to expiration of intermediate signing cert
- How can I disable signature checking for Firefox add-ons?
- Opening the Browser Console
- Отвалились все дополнения, включая тему

огромное спасибо. Все расширения в работе