Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№103-08-2016 12:07:20

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 4680
UA: Firefox 51.0

Как отключить проверку цифровых подписей в дополнениях Firefox

Начиная с версии 48, Firefox игнорирует параметр xpinstall.signatures.required, который в значении false отключал проверку цифровых подписей дополнений. Пользователи столкнулись с проблемой: дополнения, не имеющие цифровой подписи, после обновления до 48-й версии были принудительно отключены. Разработан новый способ отключения проверки цифровых подписей для успешной работы дополнений, у которых цифровая подпись отсутствует.

Если после нижеуказанных действий дополнения всё ещё не работают, удалите их и установите заново.


  1. Создайте текстовый файл:

    • Для версии 57 и выше:

      Выделить код

      Код:

      //
      try {(code => {
          var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
          var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try {
              return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {});
          } catch(ex) {}}
          if ((jsval = imp("AddonSettings"))) {
              jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true};
              try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;}
          }
          lockPref("extensions.allow-non-mpc-extensions", true);
          var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i);
      
          if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}});
      
          var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
          Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)]));
          jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}});
      
      })(String.raw`
          try {SIGNED_TYPES.clear();} catch(ex) {};
          "verifyZipSignedState" in this && (signedState => {
              var re = /\x06\x03U\x04\x03\x14[\s\S](\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i;
              var getUUID = () => {
                  var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
                  return (getUUID = () => gen.generateUUID().toString())();
              }
              var getURI = file => {
                  var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {});
                  return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file);
              }
              var getId = file => {
                  var result, is = {close() {}}, sis = {close() {}};
                  try {
                      is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open();
                      sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
                      sis.init(is); var str = sis.readBytes(sis.available());
                      var match = str.match(re); if (match) result = match[1];
                  } catch(ex) {}
                  sis.close(); is.close();
                  return result || getUUID();
              }
              verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) {
                  if (aAddon.id || aAddon._installLocation.name == KEY_APP_TEMPORARY)
                      return Promise.resolve({signedState, cert: null});
                  var root = !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)
                      ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot;
                  return new Promise(resolve => {
                      var callback = {openSignedAppFileFinished(rv, zipReader, cert) {
                          zipReader && zipReader.close();
                          resolve({signedState, cert: cert || {commonName: getId(aFile)}});
                      }};
                      gCertDB.openSignedAppFileAsync(root, aFile, callback.wrappedJSObject = callback);
                  });
              }
          })(AddonManager.SIGNEDSTATE_NOT_REQUIRED);
      `)} catch(err) {Components.utils.reportError(err);}
      

    • Для версий 55 и 56:

      Выделить код

      Код:

      //
      ["Provider", "Install"].forEach(name => {try {
          Components.utils.import(`resource://gre/modules/addons/XPI${name}.jsm`, {})
              .eval("SIGNED_TYPES.clear(); this;").eval(String.raw`"verifyZipSignedState" in this && (uuidg => {
                  var signedState = AddonManager.SIGNEDSTATE_NOT_REQUIRED;
                  var re = /\x06\x03U\x04\x03\x14[\s\S](\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i;
                  var bsp = Cu.getGlobalForObject(XPIProvider), til = bsp.eval("TemporaryInstallLocation");
                  var getId = file => {
                      var result, is = {close() {}}, sis = {close() {}};
                      var uri = bsp.getURIForResourceInFile(file, "META-INF/mozilla.rsa");
                      try {
                          is = Services.io.newChannelFromURIWithLoadInfo(uri, null).open();
                          sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
                          sis.init(is); var str = sis.readBytes(sis.available());
                          var match = str.match(re); if (match) result = match[1];
                      } catch(ex) {}
                      sis.close(); is.close();
                      return result || uuidg.generateUUID().toString();
                  }
                  verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) {
                      if (aAddon.id || aAddon._installLocation == til)
                          return Promise.resolve({signedState, cert: null});
                      var root = !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)
                          ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot;
                      return new Promise(resolve => {
                          var callback = {openSignedAppFileFinished(rv, zipReader, cert) {
                              zipReader && zipReader.close();
                              resolve({signedState, cert: cert || {commonName: getId(aFile)}});
                          }};
                          gCertDB.openSignedAppFileAsync(root, aFile, callback.wrappedJSObject = callback);
                      });
                  }
              })(Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator));`);
      } catch(ex) {}});
      

    • Для версии 54 и ниже:

      Выделить код

      Код:

      //
      try {
      Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
      .eval("SIGNED_TYPES.clear()");
      }
      catch(ex) {}



    переименуйте его в config.js (js - вместо txt, переименуйте расширение) и перенесите в папку установки Firefox: C:\Program Files\Mozilla Firefox

  2. Создайте ещё один текстовый файл:

    Выделить код

    Код:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");

    переименуйте его в config-prefs.js и перенесите в папку: C:\Program Files\Mozilla Firefox\defaults\pref




Kyogre пишет:

при наличии этих двух файлов присутствует и отрицательный эффект - невозможно установить/обновить некоторые расширения и Firefox выдает ошибку "это дополнение не может быть установлено так как оно по-видимому повреждено". При возникновении этой ошибки закройте Firefox, удалите эти два файла (предварительно сделайте резервную копию файлов!) и запустите Firefox. Установите нужное вам дополнение, закройте Firefox и верните эти файлы обратно в папки.


Do you feel lucky, punk?

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]