В свете последних событий связанных с релизом Mozilla Firefox 48, который навёл шухеру среди части пользователей, в связи с обязательным наличием подписи у расширений, люди столкнувшиеся с этой проблемой встали перед выбором, либо:
  1. не пользоваться неподписанными расширениями (плохой вариант);
  2. использовать небрэндированные сборки;
  3. идти окольными путями, пытаясь отключить проверки любыми способами, некоторые из которых предложены в следующих комментариях:
    https://geektimes.ru/post/279132/#comment_9480372
    https://geektimes.ru/post/279132/#comment_9480382
  4. подписать необходимое расширение самостоятельно.

Как вы уже догадались, здесь пойдёт речь о последнем способе. Если мы не планируем распространять расширения через официальный каталог, то подпись мы можем получить без ручных проверок, т.е. легко и просто.

Для этого нам понадобятся:
  1. учётная запись на addons.mozilla.org
  2. установленный nodejs версии >= 0.10
  3. npm версии >=3.0.0 (npm up npm)
  4. jpm для nodejs (npm install jpm).

Будем рассматривать процесс подписания на примере расширения «Random Agent Spoofer». Данное расширение содержит список юзер-агентов, которые довольно быстро устаревают, а обновляется дополнение не часто. В свою очередь, в официальном репозитории файлы с нужными нам данными обновляются регулярно и возникает закономерное желание пустить их в дело.

Итак, учётную запись зарегистрировали, программное окружение установлено, можно приступать.

Берём подопытное расширение и распаковываем его в отдельную папку, в нашем случае используем слепок репозитория, расположенного по адресу https://github.com/dillbyrne/random-agent-spoofer.
Получим следующую структуру каталогов:
    test\
    lib\
    doc\
    data\
    .gitignore
    LICENSE
    package.json
    README.md

Если используется готовое собранное расширение, то в корне папки где оно распаковано, необходимо удалить файлы «bootstrap.js» и
«install.rdf», они создаются программой сборки, а при модификации уже подписанных дополнений ещё и папку «META-INF». Т.к. мы имеем дело с ещё не собранным дополнением, то это не требуется. Следующим шагом будет редактирование файла «package.json», расположенного опять же в корне каталога распакованного расширения. В нашем случае его начало выглядит так:
{
     "name": "random-agent-spoofer",
     "title": "Random Agent Spoofer",
     "id": "jid1-AVgCeF1zoVzMjA@jetpack",
     "description": "Allows the use of various browser profiles (including useragent ,platform, oscpu, accept headers and other options), which it can randomly switch between after a chosen period of time has expired",
     "author": "dbyrne",
     ...
}

Если в нём содержится параметр «id» его надо либо изменить, либо удалить. В противном случае, мы получим ошибку при попытке подписи о том, что не являемся его владельцем.
Далее командуем следующее «заклинание» для сборки расширения в архив:

jpm xpi --addon-dir <путь к папке куда распаковали>

или просто:

jpm xpi, если текущий каталог это и есть корень распакованного расширения.

На выходе должен появиться файл собранного расширения .xpi, который и будем подписывать.

А теперь приготовим свой api-ключ, ради получения которого и регистрировались на addons.mozilla.org. Его можно увидеть по адресу addons.mozilla.org/ru/developers/addon/api/key в таком виде:

Издатель JWT: <private data>
Секрет JWT: <private data>

где <private data> — ваш персональный ключ. И в заключение, собственно, сам акт подписания осуществляем скомандовав:

jpm sign --api-key <api-key data> --api-secret <api-secret data> --xpi <путь к расширению полученному на предыдущем шаге>

Если всё пройдёт без ошибок и автоматическая проверка будет пройдена, то в текущем каталоге мы получим подписанное расширение, в котором и нуждались.

Полезные ссылки:
Документация по jpm: developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm
Signing Api: olympia.readthedocs.io/en/latest/topics/api/signing.html

Всем спасибо за внимание, удачи!
Поделиться с друзьями
-->

Комментарии (26)


  1. maxout
    09.08.2016 11:46
    +1

    Для тех, кто не хочет связываться со страшными непонятными словами npm, nodejs и прочими signing api, а просто желает чтобы любимые дополнения работали как раньше:

    1. Регистрируемся на addons.mozilla.org
    2. Инструменты — Отправить новое дополнение
    3. Ставим галку «Не вносить в список моё дополнение на данном сайте»
    4. Заливаем файл дополнения (это обыкновенный zip-архив, распаковываем старое — в файле install.rdf меняем em:id на любой другой текст — запаковываем назад)
    5. Получаем ссылку на подписанное дополнение, проходим по ней — дополнение ставится в браузер.
    6. Profit.

    Когда FF без объявления войны отказался дружить с моими дополнениями, а работать нужно было здесь и сейчас, я подписал так всё, что мне нужно, за 5 минут, из них дольше всего регался на сайте.


    1. sumanai
      09.08.2016 12:33

      > Получаем ссылку на подписанное дополнение, проходим по ней — дополнение ставится в браузер
      Можно тупой вопрос- а как выглядит эта ссылка? Ну пришла мне ссылка, открылась вот такая страница, а дальше куда?
      https://imgur.com/SmgQZdd


      1. maxout
        09.08.2016 12:40

        на «версия 3.0.0 beta 3» нажимайте, попадаете в управление версией, там скачивается файл


        1. sumanai
          09.08.2016 13:15

          У меня там качается неподписанный, по моему, вообще без изменений. Браузер не ставит как неподписанное. И вообще, я едва до той страницы добрался, почему то на третьем шаге все галочки с выбором ОС были сняты и заблокированы, пришлось через инструменты разработчика разблокировать.


          1. maxout
            09.08.2016 13:36

            подозреваю, что совершенно не зря они были заблокированы. возможно, в rdf что-то странное прописано, или сильно устаревшее.
            вставьте туда вместо существующих таргетов:
            <em:targetApplication>

            <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
            <em:minVersion>24.0</em:minVersion>
            <em:maxVersion>*</em:maxVersion>

            </em:targetApplication>


            и попробуйте снова залить.


            1. sumanai
              09.08.2016 13:43

              Я пытался подписать третью версию Firebug, не знаю, что они там могли такого написать:
              https://getfirebug.com/releases/firebug/3.0/
              Вот таргеты оттуда, вполне нормальные вроде:
              <em:targetApplication>
              <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
              <em:minVersion>44.0a2</em:minVersion>
              <em:maxVersion>*</em:maxVersion>

              </em:targetApplication>


          1. maxout
            09.08.2016 13:40

            ну и вообще пробегитесь глазами по rdf, возможно там что-то явно не так, как должно быть =)
            если аддон не какой-то приватный и покрытый печатями интеллектуальной собственности, можете мне его в личку скинуть, посмотрю.


          1. maxout
            09.08.2016 13:50

            ммм, попробовал подписать ваш старенький файрбаг — всё подписалось, загружается, ставится и работает.
            даже не знаю, попробуйте в другом браузере залить/скачать


            1. sumanai
              09.08.2016 13:52

              Так не старенький, а 3.0 бета3, новее в этой ветке нет, а 2.0 несовместим с многопроцессностью.
              Пробовал чистым профилем ФФ, пользоваться другим браузером для загрузки на AMO как-то…


              1. maxout
                09.08.2016 13:55

                я не разбираюсь, думал он obsolete. anyway — 3.0 beta 3 скачанный с вашей ссылки нормально заливается и скачивается уже подписанный. что-то у вас в консерватории не так, задизабленные галки смущают. если ехать важнее шашечек, то залить и скачать xpi можно хоть через IE )


                1. sumanai
                  09.08.2016 14:05

                  Я ещё сильнее не разбираюсь))
                  Ладно, чёрт с ним, спишу на ХР на ПК и плохую погоду на Марсе.


    1. dartraiden
      09.08.2016 14:38

      без объявления войны
      Справедливости ради, об этом предупреждали ещё в начале прошлого года. И потом откладывали и откладывали, чтобы дать максимум времени разработчикам. В итоге, у разработчиков дополнений было аж полтора года, но всё равно это оказалось для них внезапно, как наступление зимы для коммунальщиков.


  1. kranky
    09.08.2016 12:32

    >люди столкнувшиеся с этой проблемой встали перед выбором, либо:

    Забыли ещё два весьма логичных, учитывая взятое направление развития фф, варианта:

    5. Перестать обновлять ФФ.
    6. Перейти на другой браузер.

    Лично я пока выбрал пятое, но если в новых браузерах появятся какие-то новые полезные технологии, а не только свистелки, то можно будет и к шестому прибегнуть.


    1. Lindon_cano
      09.08.2016 12:53

      Более логичным будет обновлять Fx, но делать это на Unbranded builds. Вот специально для тех кому нужны левые неподписанные расширения собирают Unbranded builds.


      1. sumanai
        09.08.2016 13:32

        Эти сборки- издевательство над пользователями, так как не обновляются автоматически. То есть снижают безопасность, ухудшая её по сравнению с прежней ситуацией, когда ФФ позволял ставить неподписанные дополнения и имел автообновление.


        1. Lindon_cano
          09.08.2016 13:57
          +1

          Если человек отказывается от безопасности и хочет использовать неподписанные дополнения, то он должен быть готов ко всему остальному. Это не издевательство над пользователем, а защита и себя, и пользователя. Что бы вы не говорили поставив левое дополнение, что это Firefox виноват, если вы ставите обезбренженную сборку, то вы добровольно отказываетесь от Firefox и безопасности.

          Ну а обновления автоматизировать никто не мешает, откройте для себя ppa или его аналоги, настройте скрипты и собирайте автоматом, да обновляйте, хоть себе, хоть своим троюродным бабушкам и пятиюродным дедушкам.


          1. sumanai
            09.08.2016 14:11

            > Если человек отказывается от безопасности и хочет использовать неподписанные дополнения, то он должен быть готов ко всему остальному.
            Глупость. Если я не куплю подушки безопасности в машину, то что, мне и ремни безопасности не ставить?
            Если кто- то решил отказаться от одного элемента безопасности, это не значит, что его нужно лишать всех остальных.
            > Ну а обновления автоматизировать никто не мешает, откройте для себя ppa или его аналоги
            Подскажите, как настроить ppa на Windows XP.


            1. Vilgelm
              09.08.2016 17:30
              +1

              Но если вы пользуетесь Windows XP, то чем вас не устраивает unbranded builds? Необновляемая система и необновляемый браузер, звучит логично.


              1. sumanai
                09.08.2016 20:05

                Браузер и система это разные вещи. Запуск кода контролируется групповыми политиками, поэтому единственная возможность попасть вредоносной программе на ПК- это эксплоиты браузера, которые и закрываются обновлениями (и EMET).
                И браузер обновляется по многим причинам, не только безопасность, но и производительность и новые фичи.


            1. Lindon_cano
              09.08.2016 20:29

              Цель Mozilla — защита своего бренда. Если вы не хотите защиты дополнений, то вам предлагают пользоваться браузером не использующим их бренд и это правильно.
              С XP никак не могу помочь, проблемы распространения софта на мертвых ОС меня не интересуют, ни на Windows XP, ни на TR-DOS.


              1. sumanai
                09.08.2016 20:38

                > Цель Mozilla — защита своего бренда.
                Скоро защищать будет нечего, такими темпами, компания обанкротиться и её купят какие-нибудь китайцы.
                > то вам предлагают пользоваться браузером не использующим их бренд и это правильно.
                Это правильно, а вот отсутствие автообновления на них- это неправильно.


      1. Enverest
        09.08.2016 13:55
        +2

        Либо перейти на Firefox Developer Edition


    1. MTonly
      09.08.2016 17:21
      +1

      А ещё есть Firefox Developer Edition (Aurora) (сейчас в 50-й версии), где неподписанные расширения де-факто без проблем работают.


    1. Baton34
      09.08.2016 21:30

      7. Перейти на FF ESR, хотя это и временное решение.
      Я выбрал этот вариант, т.к. есть несколько брошенных разработчиками расширений, а без них FF для меня ничем не отличается от любого другого браузера. Плюс из-за постепенного выпиливания функций из FF начались проблемы с работоспособностью одного из них.


  1. zeit-geist
    09.08.2016 13:03

    Ваше дополнение не смогло пройти валидацию, в нём найдена 1 ошибка.

    Add-ons built with «cfx» are no longer accepted


    выходит вот это, пытаюсь подписать расширение из этой статьи


    1. dartraiden
      09.08.2016 14:33

      Изменена семантика биндингов let и const на глобальном уровне. Подробности. Это сломало все дополнения, собранные со старыми версиями JPM. Mozilla самостоятельно пересобрала дополнения, размещённые в официальном каталоге, с новой версией JPM. К сожалению, избежать нарушения совместимости невозможно, старая семантика была несовместима со спецификацией ES2016. Кроме того, перестанут работать все дополнения, собранные с помощью cfx.

      cfx is no longer supported as of Firefox 44 and no longer accepted for add-on submission. jpm should now be used instead. For information on how to migrate from cfx to jpm see this guide.