2012-01-09 4 views
2

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

Я только что обнаружил, что если я войду в FF и развернусь в Options - Advanced - Encryption - View Certificate - Власти, найдите VeriSign Class 3 Public Primary Certification Authority - G5 и отредактируйте его Trust, чтобы включить «Этот сертификат может идентифицировать разработчиков программного обеспечения "... тогда FF уважает подпись на моем XPI. WTF? – Spike0xff

ответ

3

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

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

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

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

Например (выбрал совершенно случайно), ComSign Обеспеченный CA имеет «Интернет» и «код» трастовые биты задавать.

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

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

+0

Мне также объяснили, что вы можете получить два типа сертификатов подписи кода: сертификаты подписи кода Microsoft Authenticode и сертификаты подписи Netscape. Вам нужно последнее; первый не может использоваться для подписания Firefox XPI. Вам необходимо указать орган сертификации, который вам нужен, когда вы запрашиваете сертификат. –

+0

спасибо! Вы подтвердили и разъяснили мне эту проблему. Я один разработчик в крошечной дочерней компании большой корпорации - желаю мне удачи даже найти человека, который купил корпоративный ключ для кодов, а тем более получить альтернативную версию, выпущенную ... Я все еще царапаю голову над Mozilla, не доверяю VeriSign выпускает сертификаты подписи кода ... wait: эта таблица отлично. Я вижу, что есть куча корневых сертификатов VeriSign, которые * * доверяют коду, просто * не * VeriSign PCA-G5, который находится в корне моего certigning cert. Ну, посмотрим. Конечно, цените свое время. – Spike0xff

+0

Этот поток (через вашу 2-ю ссылку) https://bugzilla.mozilla.org/show_bug.cgi?id=602107 предлагает мне, что сейчас в реальном времени. Теперь мы получим выпуск FF, который исправляет это. – Spike0xff

2

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

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

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. Создайте цепочку доверия сертификатов вашего сертификата до Microsoft "Класс 3 Public Primary Certification Authority".
  3. признак того, XPI (на этот раз полных сертификатов цепь будет включена в подписи)
  4. проверить XPI с jarsigner, как описано выше
  5. испытания XPI в Firefox - вы не должны видеть «Автор не проверен» больше.

Предостережения:

  • Доверительные биты во встроенном в Firefox хранилище сертификатов на самом деле 3-состояние (доверенному, ненадежных и неизвестных), несмотря на только быть показаны в виде 2-состояния флажка в GUI FF (checked = trusted, unchecked = untrusted OR неизвестен). По умолчанию trust is неизвестен, что позволяет обойти сертификат VeriSign, как описано. Если вы включили доверие через флажки FF, он все равно будет работать, но если вы снимете флажок доверия, то доверие будет установлено на ненадежным, что предотвратит обход этого сертификата в цепочке. Самый простой (только?) Способ вернуть его обратно к первоначальному неизвестному - удалить свой профиль firefox.
  • После того, как Mozilla в конечном итоге включит бит доверия подписи кода (см. Выше), вам все равно нужно будет подписываться, если вы хотите поддерживать более старые версии Firefox.

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

+0

Эй, StefanB, Спасибо, и жаль, что меня сняли на что-то еще, но теперь я готов попробовать это. Нам нужно поддерживать более старые версии FF. Не могли бы вы расширить свой шаг 2 - «Создать цепочку доверия сертификатов»? Тем временем я буду собирать certutil.exe с нуля ... вот! – Spike0xff

 Смежные вопросы

  • Нет связанных вопросов^_^