Страницы: 1
Добрый день!
Мы создали расширение для нашего сайта. Оно устанавливается и работает нормально.
Однако расширение не может быть обновлено в Firefox (как в 3.5.7, так и в 3.6.3) - в диалоговом окне Add-ons появляется сообщение: "Произошла ошибка при попытке поиска обновлений..." и никаких сообщений в консоли ошибок.
Для того чтобы создать пакет обновления, я использую сценарий, описанный здесь (использование HTTPS, подписка RDF файлов с помощью McCoy, добавление хеша XPI файла в update.rdf).
Вот мой install.rdf (содержащийся в файле xpi):
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:mozilla:install-manifest" em:id="extension.id" em:type="2" em:version="1.7" em:name="company ECM Extension" em:description="The ECM extension provides integration tools for working with company services." em:creator="company Europe AB" em:homepageURL="http://www.company.com" em:iconURL="chrome://ecmext/content/ecmext.png" em:aboutURL="chrome://ecmext/content/about.xul" em:updateURL="https://localhost/distrib/update.rdf" em:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4G....."> <em:targetApplication RDF:resource="urn:mozilla:firefox" /> </RDF:Description> <RDF:Description RDF:about="urn:mozilla:firefox" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="3.5" em:maxVersion="3.6.3" /> </RDF:RDF>
Вот update.rdf:
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Seq RDF:about="rdf:#$Vi19E3"> <RDF:li RDF:resource="urn:company:ecmext"/> </RDF:Seq> <RDF:Description RDF:about="urn:mozilla:firefox" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="3.5" em:maxVersion="3.6.3" em:updateLink="https://localhost/distrib/ecmext_1_7.xpi" em:updateHash="sha256:7e6139b71decd5c6f8f6ee4e58c581f184ecbfd178436da2232baa79f4fe23fd" /> <RDF:Description RDF:about="urn:company:ecmext" em:version="1.7"> <em:targetApplication RDF:resource="urn:mozilla:firefox"/> </RDF:Description> <RDF:Description RDF:about="urn:mozilla:extension:extension.id" em:signature="MIGTMA0GCSqGSIb3DQEBDQUAA4GBAFL0pBKuHY3oLY84qd....."> <em:updates RDF:resource="rdf:#$Vi19E3"/> </RDF:Description> </RDF:RDF>
(длинные значения BASE64 усечены)
Сообщение выскакивает мгновенно, сразу после запроса к update.rdf. Запрос к файлу ecmext_1_7.xpi не выполняется.
Таким образом, проблема либо в файле update.rdf ИЛИ в ответе сервера. Не могу придумать других причин!
Вот заголовки ответа сервера:
HTTP/1.1 200 OK Cache-Control: public, max-age=7776000 Content-Length: 1238 Content-Type: text/xml Expires: Tue, 24 Aug 2010 18:04:49 GMT Last-Modified: Wed, 26 May 2010 17:38:42 GMT Accept-Ranges: none Etag: "509423464d6" Server: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-UA-Compatible: IE=EmulateIE7 Date: Wed, 26 May 2010 18:04:49 GMT
Вот для сравнения ответ addons.mozilla.org:
HTTP/1.1 200 OK Server: Apache X-Backend-Server: pp-app-amo01 Cache-Control: public, max-age=3600 Content-Type: text/xml Date: Wed, 26 May 2010 17:20:38 GMT Keep-Alive: timeout=5, max=994 Expires: Wed, 26 May 2010 18:20:38 GMT Accept-Ranges: bytes Via: Moz-Cache-pp-zlb01 Last-Modified: Wed, 26 May 2010 17:20:38 GMT X-Powered-By: PHP/5.2.9 Content-Length: 1063 Connection: close X-Cache-Info: cached
Существенной разницы не нахожу.
Кроме того, возможно ли, что Firefox выбрасывает ошибку, когда находит self-signed SSL certificate сервера, установленный на моем рабочем компьютере? Если возможно (в чем я сомневаюсь), как же тогда вести разработку, если не покупать "правильные" сертификаты?
Короче, куда-то я не туда копаю... Пожалуйста, ткните в причину и завершите мое сегодняшнее безумие!
Спасибо
Отредактировано Zeiss (27-05-2010 15:17:55)
Отсутствует
Zeiss
Какой-то странный update.rdf. См. примеры в https://developer.mozilla.org/en/Extens … RDF_Format
Что касается отладки, то:
The update mechanism logs information to the console, and display various information which can help you to find problem. To enable the log:
1. Set the value of extensions.logging.enabled to true (using URL about:config)
2. Run Firefox from command with option -consoleIf you encounter problems, search the output in console for your extension id, and see if failures were logged.
Добавлено 26-05-2010 23:51:21
em:updateLink="https://localhost/distrib/ecmext_1_7.xpi"
em:updateHash="sha256:7e6139b71decd5c6f8f6ee4e58c581f184ecbfd17
Насколько я понимаю, нужно либо использовать https в updateLink, либо updateHash. И то и то - не нужно. Вся суть updateHash - дешёвая замена для https.
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует
См. примеры в https://developer.mozilla.org/en/Extens … RDF_Format
Да, оно! Спасибо за исчерпывающий первоисточник!
Использовал хеш+https "для верочки"
На продакшн сервере сертификат правильный, там всё ОК, а на тестовом и dev машинах - self-signed, которые мозиллой режектятся.
Какой-то странный update.rdf
Его так переорганизовал МакКой.
Отсутствует
Zeiss
а на тестовом и dev машинах - self-signed, которые мозиллой режектятся.
Ну вроде можно добавить свой самоподписанный сертификат в базу сертификатов Mozilla при помощи Certificate Database Tool.
Do you feel lucky, punk?
Отсутствует
Ну вроде можно добавить свой самоподписанный сертификат в базу сертификатов Mozilla при помощи Certificate Database Tool.
А разве сертификаты туда не добавляются через диалог, когда нажимаешь Add Exception на странице "This Connection is Untrusted"?
Энивей, решено путём отказа от обновлений по https.
Отсутствует
Zeiss
А разве сертификаты туда не добавляются через диалог, когда нажимаешь Add Exception на странице "This Connection is Untrusted"?
Добавляются, в профиль пользователя. Но иногда надо развернуть дистрибутив с уже добавленными сертификатами, чтобы юзеры не звонили с глупыми вопросами об вылезающих страницах с непонятным и пугающим текстом.
Do you feel lucky, punk?
Отсутствует
иногда надо развернуть дистрибутив с уже добавленными сертификатами
Спасибо за ценную информацию!
У нас, правда, не корпоративные пользователи, и самописный сертификат используется только для разработки.
Отсутствует
У меня тоже нихочет обновляться, самоподписаный сертификат на локальном сервере. mime-типы выставил. добавил сертификат в исключение.
Fiddler'ом перехватывал update.rdf'ы других расширений, и делал по их аналогии... Лиса-Алиса молчит как партизан и не обновляет, update.rdf загружает, но ошибок никаких не выдаёт. Может точно, что дело в HTTP-заголовках?
install.rdf:
<?xml version="1.0" encoding="UTF-8"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>aagent@mozilla.org</em:id> <em:version>1.1</em:version> <em:type>2</em:type> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>3.0a1</em:minVersion> <em:maxVersion>7.0a1</em:maxVersion> </Description> </em:targetApplication> <em:name>AutoCrack Agent</em:name> <em:bootstrap>false</em:bootstrap> <em:unpack>false</em:unpack> <em:creator>Eugen Li</em:creator> <em:updateURL>https://money.local/aca/update.rdf</em:updateURL> <em:optionsURL>chrome://autocrackagent/content/form_settings.xul</em:optionsURL> </Description> </RDF>
update.rdf:
<?xml version="1.0"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <RDF:Description about="urn:mozilla:extension:aagent@mozilla.org"> <em:updates> <RDF:Seq> <RDF:li resource="urn:mozilla:extension:aagent@mozilla.org:1.2" /> </RDF:Seq> </em:updates> </RDF:Description> <RDF:Description about="urn:mozilla:extension:aagent@mozilla.org:1.2"> <em:version>1.2</em:version> <em:targetApplication> <RDF:Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>3.0a1</em:minVersion> <em:maxVersion>7.0a1</em:maxVersion> <em:updateLink>http://money.local/aca/aca.xpi</em:updateLink> <em:updateInfoURL>https://money.local/aca/</em:updateInfoURL> <em:updateHash>sha256:1c47d57fecaa4ef34351eaabbf04172950ad8e41328684bdb351c1af1c41331c</em:updateHash> </RDF:Description> </em:targetApplication> </RDF:Description> </RDF:RDF>
Отредактировано futureFAvorit32 (04-06-2011 14:03:28)
Если бы у людей были крылья, они бы... улетали на зиму в тёплые края.
Отсутствует
futureFAvorit32
Попробуйте сверить с тем, что под спойлером ниже - это install.rdf и update.rdf от абсолютно стабильно апдейтящегося расширения. Причем нигде не используется https.
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:mozilla:install-manifest" em:id="{2ff1a7f6-ad47-4579-849a-89a90a91e9a9}" em:type="2" em:name="BarPrefs" em:version="0.0" em:creator="%20" em:description="subj" em:updateURL="http://dl.dropbox.com/u/14131025/testing/update.rdf" em:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBi........................"> <em:targetApplication RDF:resource="rdf:#$6ztS.1"/> </RDF:Description> <RDF:Description RDF:about="rdf:#$6ztS.1" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="4.0b12" em:maxVersion="5.*" /> </RDF:RDF>
Расширение, версия 1.0:
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:mozilla:install-manifest" em:id="{2ff1a7f6-ad47-4579-849a-89a90a91e9a9}" em:type="2" em:name="BarPrefs" em:version="0.1" em:creator="%20" em:description="subj" em:updateURL="http://dl.dropbox.com/u/14131025/testing/update.rdf" em:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ....................................................."> <em:targetApplication RDF:resource="rdf:#$6ztS.1"/> </RDF:Description> <RDF:Description RDF:about="rdf:#$6ztS.1" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="4.0b12" em:maxVersion="5.*" /> </RDF:RDF>
update.rdf для апдейта версии 0.0 на 1.0:
<?xml version="1.0"?> <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="rdf:#$Wfjs52" em:version="1.0"> <em:targetApplication RDF:resource="rdf:#$Zfjs52"/> </RDF:Description> <RDF:Description RDF:about="rdf:#$Zfjs52" em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" em:minVersion="4.0b8pre" em:maxVersion="5.*" em:updateLink="http://dl.dropbox.com/u/14131025/testing/barprefs_new.xpi" em:updateHash="sha1:ff5648cfe1de270cf935d54a4363fc3fd720c19e" /> <RDF:Seq RDF:about="rdf:#$Vfjs52"> <RDF:li RDF:resource="rdf:#$Wfjs52"/> </RDF:Seq> <RDF:Description RDF:about="urn:mozilla:extension:{2ff1a7f6-ad47-4579-849a-89a90a91e9a9}" em:signature="MIGTMA0GCSqGSIb3DQEBDQUAA4..........................................."> <em:updates RDF:resource="rdf:#$Vfjs52"/> </RDF:Description> </RDF:RDF>
Отсутствует
Расширение версии 0.0 находится здесь: http://dl.dropbox.com/u/14131025/testin … fs_old.xpi; версия 1.0 - на том же ресурсе. Расширение тестовое, и не содержит ничего, кроме настроек. Делалось все с помощью McCoy.
Да, с McCoy всё пашет.
Ну, и загляните вот сюда: https://developer.mozilla.org/en/Extens … patibility - мало ли, вдруг найдёте то, что упустили или забыли.
В таком формате и в таком https://developer.mozilla.org/en/install_manifests с ключами McCoy тоже всё работает.
Итог исследований обновления показал:
HTTP+Hash - не работает.
HTTPS+Hash - не работает.
HTTP+McCoy+Hash - работает.
ЗЫ: install.rdf должен иметь в em:updateURL HTTPS-ссылку или иметь ключи созаны McCoy, иначе расширение не ставиться (на Firefox 4.*).
Если бы у людей были крылья, они бы... улетали на зиму в тёплые края.
Отсутствует
HTTP+McCoy+Hash - работает
По данной выше ссылке написано же:
Gecko 1.9 has added additional requirements designed to protect users from man-in-the-middle attacks and the like during add-on updates. In the install.rdf of the already installed add-on updateURL must be specified in one of the following ways:
The updateURL uses https, or there is no updateURL at all (which defaults to addons.mozilla.org which is https)
The updateURL uses http and the updateKey entry is specified which will be used to verify the data in the update manifest.When you specify an updateKey in the install.rdf, you must include a digital signature in the update manifest or the information will be rejected.
Вот этот updateKey с его digital signature и включается в манифесты с помощью McCoy. А сама эта сигнатура является base-64 encoded открытой частью RSA-ключа.
Что же до хэша, то это просто для контроля целостности файла слитого обновления.
Отсутствует
Страницы: 1