Firefox игнорирует подпись на успешно подписанном XPI - как диагностировать? - PullRequest
2 голосов
/ 09 января 2012

Я создал плагин Firefox, библиотеку DLL с собственным кодом Win32, используя Firebreath . Я работаю на Windows 7 / x64 и ориентируюсь только на Windows. Сам плагин работает хорошо, но я действительно застрял, получив правильно подписанный XPI. Если я не подпишу мой XPI, он будет принят и установлен FF 3.6 - 10 (бета). Конечно, во время установки он перечисляет издателя как (Автор не подтвержден) . Итак, я потратил неделю на отладку процесса подписания ... но FF 9 и 10 все еще говорят (Автор не проверен) ! FF 3.6 отклоняет подписанный XPI как недействительный.

Как мне устранить эту проблему ??

Просто повторюсь: я подписываю xpi без ошибок, и полученный XPI успешно устанавливается на FF 9 и 10, но FF по-прежнему говорит (Автор не подтвержден) .

Вот код пакета, который я использую для подписи XPI:

echo * clean out old signing folder and xpi
if exist package rmdir /S /Q package
if exist %package%.xpi del %package%.xpi
echo * copy in files for package
md package
xcopy ..\*.rdf package
md package\plugins
xcopy ..\build\bin\Plugin\Debug\*.dll package\plugins
echo * clean out certificate database
del *.db
echo * import our signing certificate
pk12util -d . -i %keyfile% -K %pwd% -w keypass.txt
echo * adjust trust on base, intermediate and root cert
certutil -M -d . -n "VeriSign" -t "c,c,C"
certutil -M -d . -n "VeriSign Class 3 Code Signing 2010 CA - VeriSign, Inc." -t "TC,TC,TC"
certutil -M -d . -n "%certname%" -t "u,u,Cu"
certutil -L -d .
echo * create signed package
signtool -d . -X -Z %package%.xpi -k "%certname%" -p %pwd% package

Ответы [ 2 ]

3 голосов
/ 11 января 2012

Я работаю на Mozilla, но это не авторитетный ответ, а то, что я собрал, задавая вопросы:

Итак, по сути, у каждого центра сертификации есть три бита доверия, которые может предоставить Mozilla: они могутдоверяйте ему подписывать веб-сайты, и / или почту, и / или код.Ваш сертификат получен от центра сертификации, которому Mozilla не доверяет подписывать код.(Вот почему переход и ручная установка бита в ваших предпочтениях заставляют его работать - для вас.)

Мне сказали, что очень немногие люди пытаются использовать двоичный код в xpi, что Mozilla на самом деле не имеет организованногоспособ выяснить, какие органы власти могут быть использованы для чего.Тем не менее, вы можете проверить этот список: посмотрите на «Код доверенного бита»:

https://spreadsheets.google.com/pub?key=ttwCVzDVuWzZYaDosdU6e3w&single=true&gid=0&output=html

Например, (выбран совершенно случайно), у защищенного CA ComSign есть «Веб-сайты»и установлены биты доверия «Код».

Я понял, что Mozilla публично обсуждает, какие права предоставлять каждому ЦС, и периодически переоценивает каждый ЦС:

https://wiki.mozilla.org/CA:Schedule#Queue_for_Public_Discussion

2 голосов
/ 13 января 2012

В основном ваша подпись должна включать полную цепочку сертификатов вплоть до доверенного корневого сертификата VeriSign, минуя «Открытый первичный центр сертификации VeriSign Class 3 - G5» с неизвестным доверием к Mozilla ( ошибка 602107 ), так какпо умолчанию цепочка заканчивается слишком рано.

Ваш XPI в настоящее время подписан вашим сертификатом, без дополнительной цепочки сертификатов, что означает, что браузер пользователя будет доверять издателю вашего сертификата немедленно.Вы можете проверить это с помощью инструмента jarsigner Mozilla (см. Инструменты NSS Mozilla ):

Tools\nss-3.11>jarsigner -verify -verbose -certs my-old.xpi
    2057 Thu Sep 15 15:17:44 CEST 2011 META-INF/zigbert.rsa
sm        87 Thu Sep 15 15:17:44 CEST 2011 chrome.manifest

  X.509, CN=Company Name inc., OU=General, OU=Digital ID Class 3 - Microsoft Software Validation v2, O=Company Name inc., L=City, ST=State, C=XX
  [certificate will expire on 26.4.13 0:59]

(показывает только вывод для 1-го файла)

Вам нужнодобавить еще несколько сертификатов для завершения цепочки к сертификату, которому по умолчанию явно доверяют в браузере конечного пользователя.В конце это должно выглядеть так:

jarsigner -verify -verbose -certs my-newly-signed.xpi

    2057 Thu Sep 15 15:17:44 CEST 2011 META-INF/zigbert.rsa
sm        87 Thu Sep 15 15:17:44 CEST 2011 chrome.manifest

  X.509, CN=Company Name inc., OU=General, OU=Digital ID Class 3 - Microsoft Software Validation v2, O=Company Name inc., L=City, ST=State, C=XX
  [certificate will expire on 26.4.13 0:59]
  X.509, CN=VeriSign Class 3 Code Signing 2010 CA, OU=Terms of use at https://www.verisign.com/rpa (c)10, OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
  [certificate is valid from 8.2.10 1:00 to 8.2.20 0:59]
  [KeyUsage extension does not support code signing]
  X.509, CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
  [certificate is valid from 8.11.06 1:00 to 8.11.21 0:59]
  [KeyUsage extension does not support code signing]
  X.509, OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US
  [certificate is valid from 23.5.06 19:01 to 23.5.16 19:11]

Для этого вам необходимо:

  1. удалить встроенные сертификаты VeriSing, не являющиеся явно доверенными, из базы данных сертификатовс помощью certutil инструмента Mozilla
  2. Создайте цепочку доверия сертификатов для вашего сертификата вплоть до «Общедоступного первичного центра сертификации 3» Microsoft.
  3. подписывают xpi (на этот раз полная цепочка сертификатовбудет включен в подпись)
  4. проверьте xpi с jarsigner, как описано выше
  5. протестируйте xpi в Firefox - вы не должны видеть " Автор не проверен "больше.

Предупреждения:

  • Биты доверия во встроенном хранилище сертификатов Firefox на самом деле имеют три состояния (доверенные, ненадежные и неизвестные), хотя отображаются только какФлажок с 2 состояниями в графическом интерфейсе FF (проверено = доверенное, непроверенное = недоверенное ИЛИ неизвестно).По умолчанию доверие равно unknown , что позволяет обходить сертификат VeriSign, как описано.Если вы когда-либо включали доверие через флажки FF, оно все равно будет работать, но если вы снимите флажок доверия, доверие будет установлено на ненадежное , что предотвратит обход этого сертификата в цепочке.Самый простой (только?) Способ вернуть его обратно к исходному неизвестному - это удалить ваш профиль Firefox.
  • После того, как Mozilla в конечном итоге включит бит доверия для подписи кода (см. Ошибку выше), вам все равно нужно будет подписать какэто если вы хотите поддерживать более старые версии Firefox.

Надеюсь, это поможет!

...