Xpoint
   [напомнить пароль]

Удаленные XUL приложения. Несколько интересных предложений

Метки: [без меток]
2004-03-05 13:32:12 [обр] Владимир Шапиро (Ronin)(0/2)[досье]

C вашего позволения, в продолжение к теме:

http://xpoint.ru/forums/programming/XUL/thread/24120.xhtml

приведу краткий персказ (мою трактовку) постинга из форумов на XULPlanet
http://www.xulplanet.com/forum/viewtopic.php?t=371

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

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

Итак...

  1. Не стоит использовать RDF в удаленных XUL приложениях. Вместо этого предлагается использовать собственный формат XML и объект XMLHttpRequest, чтобы работать с серверными скриптами.
  1. Серверные скрипты (PHP, CGI,...) рекоммендуется располагать в том же домене, что и XUL приложение, чтобы вместо XPConnect использовать, опять же, XMLHttpRequest. В случае,к огда расположение на одном домене не возможно - предлагается писать простые скрипты-гейты, перенаправляющие запрос в другой домен.
  1. В качестве примера вышесказанного предлагается изучить код MAB (Mozilla Amazon Browser) (http://www.infodraft.com/~faser/mab/), который с успехом использует приведенный выше подход.Кроме того автор постинга адаптировал браузер, переписав гейт обращения к Амазону на PHP (www.mamute.net/monet/mab/content/mab.xul). Так же, на мой взгляд, полезный пример.
  1. Вопрос изучать или не изучать DOM Javascript считаю риторическим :)
спустя 1 час 8 минут [обр] Владимир Палант(434/4445)[досье]
  1. На данный момент это действительно так. Интерфейсы RDF не приспособлены для использования на удаленных сайтах. Работа в этом направлении ведется (bug 122846).
спустя 4 часа 46 минут [обр] Сергей Чернышев(25/589)[досье]
А чем RDF они так плохи? Права нужны слишком высокие для работы с ним?
спустя 40 минут [обр] Сергей Чернышев(25/589)[досье]
Кстати, к вопросу о RDF: http://www.livejournal.com/users/neil_deakin/77886.html
спустя 35 минут [обр] Владимир Палант(434/4445)[досье]
Да, именно права. Кроме того существует несколько известных багов, проявляющихся в удаленном XUL даже при наличии прав.
спустя 59 минут [обр] Сергей Чернышев(25/589)[досье]

Владимир Палант[досье]
Наличие прав имеется ввиду даже при signed code?

В принципе, конечно, это плохо, но учитывая один клик плюс ребут для установки в chrome - не очень-то он и нужен - этот удаленный XUL - вот RDF это другое дело.

спустя 4 минуты [обр] Владимир Палант(434/4445)[досье]

Не уверен, не помню уже подробностей.

Удаленный XUL нужен из-за автоматического обновления — у пользователя ничего не стоит, весь интерфейс на сайте.

спустя 4 часа 21 минуту [обр] Сергей Чернышев(25/589)[досье]
Владимир Палант[досье]
Не, ну это-то понятно, но можно и подождать слегка. Самое худшее что можно сделать это заставить юзера один раз поставить кусок, который сам будет принудительно проверять апдейты и запускать апгрейд прося юзера перезапустить браузер.
спустя 1 день 12 часов [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]

А чем RDF они так плохи? Права нужны слишком высокие для работы с ним?

Ну кроме прав я хотел юбы отметить тот факт, что RDF "навороченный" формат. разобраться в котором удается даллеко не всем и далеко не сразу. Использовать свой XML на каком-то этапе может оказаться вполне реальной и более дешевой альтернативой.

спустя 16 минут [обр] Владимир Палант(434/4445)[досье]
На самом деле формат RDF достаточно прост и всего лишь непривычен. Если понять идею, то работать с ним очень удобно.
спустя 44 минуты [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Джентельмены!

Разрешите попросить вас рассмотреть проблему на конкретном примере.
У меня есть маленькая мечта. Я пишу XUL интерфейс к системе администрирования простой ленты новостей на одном из сайтов. Функции системы достаточно просты:

  1. показать список новостей
  2. добавить новость
  3. отредактировать новость
  4. удалить новость

Примечание. К системе должен быть доступ из разных мест, в том числе с любого компьютера где стоит мозилла. Замечу, что "любой компьютер" не всегда означает компьютер, на который что-то можно установить и потом его перезагрузить. "Любой компьютер", в моем понимании, это машина, на которой установлена мозилла со стандартными настройками.

Предположим, что новости лежат в базе (допустим в MySQL), и запросы, реализующие функции 1 - 4 реализованы (например PHP скриптами).

Теперь я попробую рассмотреть процесс создания такого XUL-приложения пошагово.

  1. Настраиваем mime type apache
    1. Для XUL : application/vnd.mozilla.xul+xml
    2. Для RDF : text/xml
  1. Создаем XUL интерфейс
    1. Заставляем скрипт, выбирающий ленту новостей - отдавать RDF. По желанию RDF может выддавать и скрипт, выбирающий отдельную новость.
    2. Подключаем RDF datasource в XUL интерфейс. В XUL элементе (допустим в Tree) появляется наш список новостей.
    3. Подключаем функции добавления, изменения, удаления. Пишем их вызовы из Javascript. Проверяем, что в базе все действительно происходит как задумано. (Я, например, для простоты реализовывал вызов таких функций через XMLHttpRequest)
  1. Теперь самое интересное. Нужно отобразить изменения в списке. Т.е. перезагружать RDF datasource, после каждого события, изменяющего данные в базе. Конкретный ситаксис перезагрузки обсуждался в этом форуме. Проблема в том, что на данную операцию c RDF нужны права. Допустим на этапе разработки я пользовался тем, что вставлял в prefs.js
user_pref("signed.applets.codebase_principal_support", true);

Теперь мне нужно опубликовать мое приложение. Соответственно я не могу заставить всех пользователей менять настройки мозиллы. Мне надо скрипт подписать.

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

Выходов, на мой взгляд, два:

  1. либо кто-то описывает алгоритм подписывания и размещения скрпитов с примерами и пошагово
  2. либо вместо remote RDF Datasource нужно использовать свой XML и XMLHttpRequest.

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

Спасибо.

Итак, что мне нужно сделать.

спустя 5 часов [обр] Сергей Чернышев(25/589)[досье]
Владимир Шапиро (Ronin)[досье]
Сам никогда не подписывал код, но могу попробовать разобраться и попробовать "разжевать".
спустя 15 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]
Сергей Чернышев[досье]
Было бы инетерсно. Я с удовольствием бы попробовал разобраться вместе с Вами. Заодно поделился бы опытом предыдущих разборок.
Можно было бы сделать общий удаленный пример.
спустя 4 часа 45 минут [обр] Сергей Чернышев(25/589)[досье]

Первые попытки запустить новые NSS Tools под виндами успехом не увенчались - они почему-то не функционировали совсем... Потом попробую еще под Linux-ом.

На чем вы застопорились?

спустя 11 часов [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Под виндой мы тоже уперлись в стену. Последняя версия signtool (1.3) была выпущена под NT.

Далее.

Для того, чтобы создать сертификат, ей нужны были базы сертификатов cert7.db и key3.db.
В профайле Феникса есть только cert8.db и key3.db...

Ладно. В профайле Мозиллы нашлись нужные cert7.db и key3.db., но с ними signtool отказался работать наотрез.

После этого мы продолжили эксперимент с signtool под FreeBSD. Где-то в доках промелькнуло, что с базами от Netscape Communicator 4.7 все это должно работать. Мы нашли этот реликт на одной из машин и взяли базы оттуда. Действительно заработало. Нам удалось создать сертификат. После этого создать .jar архив и даже обратиться к нему используя конструкцию:

jar:http://sitename.org/test/xul/testjar.jar!/things.xul

Скрипт просто подгружал RDF в дерево из файла.

На JS: консоли возникло предупреждение

Signature Verification Error: the signature on things.xul is invalid because the digital signature (*.RSA) file is not a valid signature of the signature instruction file (*.SF).

Далее мы решили (наудачу) опробовать ту самую перезагрузку дерева, для которой нужны привелегии
и получили стандартно

A script from "jar:http://sitename.org/test/xul/testjar.jar!/things.xul" was denied UniversalXPConnect privileges.

Естественно мы начали поиск по Signature Verification Error и нашли вот эту тему:
http://www.xulplanet.com/forum/viewtopic.php?t=280

где собственно люди столкнулись с теми же проблемами. Решения там не видно.

На этом мы приостановились.

спустя 4 часа 11 минут [обр] Сергей Чернышев(25/589)[досье]

Вот этот мессадж из обсуждения на XULPlanet:

Signature Verification Error: the signature on dragdrop.xul is invalid because the certificate used to sign this file has an unrecognized issuer.

Говорит о том, что в браузере тот SOA сертификат, который вы использовали (вы же не покупали его у VeriSign а сделали свой) не распознается браузером как валидный - его нужно импортировать в Mozill-у чтобы он его распознавал как валидный подписывающий сертификат и тогда по идее должно все заработать.

Кстати, в доках написано, что cert8.db должно также работать как и cert7.db - это просто новый формат. Нужно будет на практике проверить.

спустя 14 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

"его нужно импортировать в Mozill-у"
каким образом это делается например в Файерберде?

Кроме того, я так понимаю, что каждый пользоователь моей системы должен будет провести импорт сертификата вручную? Для многих Remote приложений это просто нереально. Или?

Или мне нужно покупать сертификат. Т.е. платить деньги за создание обыкновеного remote приложения, кторое, посути, и не требует то SSL. Это осознанная политика Mozilla?

С cert8.db у нас не получилось. Буду рад, если вы попробуете.

спустя 21 минуту [обр] Сергей Чернышев(25/589)[досье]

Владимир Шапиро (Ronin)[досье]
Да, на самом деле не понятно почему работа с RDF не может быть ограничена обычным принципом "same origin" - видимо потому что у них пока-что нету разграничения доступа к отдельным XPCOM компонентам и если вы хотите использовать хоть один из них, то вам необходимо иметь привелигированный доступ.

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

Кстати, в вашем случае (если проблема с сертификатом не разрешится) все-таки можно обойтись установочным пакетом с последующей возможностью uninstall-ировать его - таким образом "любая Mozilla" (это ваше требование) потребует только перезапуска.

спустя 7 минут [обр] Сергей Чернышев(25/589)[досье]

В Firebird с сертификатами работают здесь: Tools->Options->Advanced->Certificates->Manage Certificates

Вам нужна папка Authorities - и Import. Файл должен быть как я понимаю обычным x509 (pem) так как это те же сертификаты с которыми работает SSL (вот какая-то статья где по русски об SSL написано: http://www.opennet.ru/docs/RUS/ssl/)

спустя 59 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]

Commumicator сформировал следующие файлы

 x509.cacert
 x509.raw

Первый из них текстовый сертификат. Второй бинарник, как я понимаю.

Мозилла и Феникс требуют на импорт несколько другой формат: PKCS12
При попытке насильно "сплавить" Мозиллеили Фениксу эти сертификаты после ввода пароля выпадает окнос ошибкой: "либо файл не PKCS12, либо пароль не правильный". Пароль правильный.Значит мы не кушаем этот формат.

Может быть вам удастся сгенерировать родной сертификат из cert8.db и импортировать его?
Боюсь в моем случае проблема в том, что это сертификаты Communicator 4.7

спустя 1 минуту [обр] Владимир Шапиро (Ronin)(0/2)[досье]
Мозилла и Феникс требуют на импорт несколько другой формат: PKCS12
Имелось ввиду не формат, а расширение. Мозилла не находит расширения .cacert как стандартные.
спустя 18 минут [обр] Сергей Чернышев(25/589)[досье]

Владимир Шапиро (Ronin)[досье]
расширения, кажись жолжны быть пофигу - там дело только в формате.

Короче нужно сконвертировать x509 в PKCS12 - вот тут кажись написано как: http://www.drh-consultancy.demon.co.uk/pkcs12faq.html (вопрос "Q. I'm having real problems getting a certificate into Netscape. Help!", пункт 7).

спустя 2 минуты [обр] Сергей Чернышев(25/589)[досье]
Кстати, возможно, генерить сертификаты для Mozilla можно при помощи OpenSSL аналогично тому как это делается для MSIE Authenticode (тот же документ http://www.drh-consultancy.demon.co.uk/pkcs12faq.html - раздел "MSIE Authenticode issues.")
спустя 3 минуты [обр] Сергей Чернышев(25/589)[досье]

Кстати, там же есть раздел "Netscape Communicator Specific Issues." и вопрос "I want to use the certificate for object signing with Netscape: how do I do this?". Так что генерация сертификата возможна при помощи OpenSSL что крайне приятно ибо это абсолютно живой и мощный продукт.

Осталось дело за малым - подписать этим сертификатом код ;)

спустя 56 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]
Фух. Море инфы. Постараюсь завтра все обработать. Надеюсь мы на верном пути.
спустя 7 минут [обр] Сергей Чернышев(25/589)[досье]
Однозначно ;)
спустя 1 час 33 минуты [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]

Не удержался и остался на работе до 21:00. Методом "тыка" создал сертификат с помощью opensslи внедрил его в Феникс. Т.е. вот это работает:
http://www.drh-consultancy.demon.co.uk/pkcs12faq.html

Осталось дело за малым - подписать этим сертификатом код ;)

Этим мы займемся завтра. Тут без пол-литры... Я так полагаю опять signtool брать придется лил есть тулзы у openssl?

спустя 43 минуты [обр] Сергей Чернышев(25/589)[досье]
Логика подсказывает, что раз сертификаты стандартные, то и signing у них должен быть стандартный - если бы нарыть подписаный package - его можно было бы развернуть и посмотреть как именно он подписывается (какие файлики куда записываются), но сначала нужно signtool-ом поработать - по идее должно запахать.
спустя 16 часов [обр] Владимир Палант(434/4445)[досье]
Сергей Чернышев[досье]
А jarsigner использовать не пытались? Поставляется с любой версией JDK и инструкций по его использованию должно быть немало...
спустя 3 часа 4 минуты [обр] Сергей Чернышев(25/589)[досье]
Ну, а формат-то тот же? Или у Mozilla свой какой-нибудь?
спустя 27 минут [обр] Владимир Палант(434/4445)[досье]
За проверку апплетов и скриптов в Mozilla отвечает один и тот же код. А signtool когда-то поставлялся вместе с Java, но то было давно и неправда...
спустя 10 минут [обр] Сергей Чернышев(25/589)[досье]
Владимир Палант[досье]
Хм. Тогда нужно попробовать потому что должно по идее так быть - не стали бы они, по идее, новый стандарт изобретать - нет в этом необходимости.
спустя 1 час 44 минуты [обр] Владимир Палант(434/4445)[досье]
Поэкспериментировал и я. Работать с jarsigner очень просто, но выяснилось, что Netscape с ним не совместим ещё с давних времен: Bug 32879
спустя 1 час 44 минуты [обр] Владимир Палант(434/4445)[досье]

Установка NSS Tools под Windows:

  1. Качаем с ftp://ftp.mozilla.org/pub/mozilla.org/security/ нужную версию, желательно не дебаговую (для меня она находилась в nss/releases/NSS_3_9_RTM/WINNT5.0_OPT.OBJ/)
  2. Распаковываем в новый каталог
  3. Копируем все DLL из каталога lib в каталог bin (или другой каталог, где программы смогут найти библиотеки)
  4. Копируем туда же из програмного каталога Mozilla библиотеки nspr4.dll (как nspr4.dll и libnspr4.dll), plc4.dll (как libplc4.dll), plds4.dll (как libplds4.dll). На самом деле NSPR нужно было скачать отдельно, но в Mozilla они и так есть, хоть и под другими названиями.

Не слишком просто, но теперь программы можно использовать.

спустя 29 минут [обр] Сергей Чернышев(25/589)[досье]
Владимир Палант[досье]
Да вы шаман, батенька ;) Приду домой - попробую.
спустя 39 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Владимир Палант[досье]

 Работать с jarsigner очень просто, но выяснилось,...

О нет...

Мы бились с signtool под FreeBSD и Darwin сегодня весь вечер. Сертификат похоже правильный (openssl PKCS12 objsign). Возможно вся проблема в старой базе Коммуникатора.

NSS Tools на Darwin стали криво именно из-за допю. библиотек. Они не находятся. куда их не положить.

Оставалась надежда на JDK. Теперь и она умерла. Осталось пробовать NSS под XP.

До завтра.

спустя 15 минут [обр] Владимир Палант(434/4445)[досье]
сообщение промодерировано

Дальше:

  1. Запускаем certutil -N и создаем новую базу сертификатов в своем домашнем каталоге (можно указадь каталог явно параметром -d, тогда его нужно добавлять и ко всем остальным командам). Задаем для этой базы пароль (рекомендуется как минимум 8 знаков и использование цифр).
  2. Создаем новый сертификат: signtool -p пароль -G сертификат. Пароль в командной строке указывать обязательно — это известный баг. Называть сертификат можно, как угодно — это название только для собственного использования. А вот опрашиваемая информация войдет в сертификат (все поля необязательные). "Срок годности" сертификата по умолчанию: 3 месяца.
  3. Создаем новый каталог, в который копируем содержимое нашего будущего JAR-файла. Загнать туда одни скрипты недостаточно — Mozilla не даст права подписаным скриптам, если их используют неподписаные страницы. Подозреваю, что в JAR нужно положить все загружаемые файлы, включая CSS.
  4. Создаем JAR-файл командой signtool -p пароль -Z файл.jar -k сертификат путь_к_каталогу. Менять файлы в архиве после этого уже нельзя, при любом изменении эту процедуру нужно проделать заново.
  5. Закачиваем файл на сервер и открываем страничку из него в браузере (URL типа: jar:http://localhost/test.jar!/test.html, то есть из архива http://localhost/test.jar открыть файл /test.html). Получаем в JavaScript Console:
Signature Verification Error: the signature on test.html is invalid because the certificate used to sign this file has an unrecognized issuer

Выполнять какие-либо скрипты для этого не нужно, достаточно открыть страницу.

  1. Идем в Edit / Preferences / Privacy & Security / Certificates, жмем на Manage Certificates и переходим к Authorities. Находим там свой сертификат и жмем Edit, ставим галочку на This certificate can identify software makers.
  2. Загружаем опять страничку из архива (сообщение в JavaScript Console больше не появляется) — она уже может требовать права.

Пятый и шестой шаг наверняка можно заменить экспортом сертификата из базы и его автоматическим импортом, с этим еще надо разобраться.

Использовать signtool от Netscape я не рекомендую — похоже на то, что он несовместим (как минимум, что касается баз сертификатов — cert7.db в новых версиях Mozilla уже не используется).

спустя 11 минут [обр] Владимир Палант(434/4445)[досье]

Владимир Шапиро (Ronin)[досье]
По поводу библиотек, из ftp://ftp.mozilla.org/pub/mozi......ss/releases/NSS_3_9_RTM/README (ссылка не всегда рабочая, поскольку ftp.mozilla.org на самом деле 6 разных серверов и на некоторых из них этого файла почему-то нет):

You also need to download the NSPR 4.4.1 binary distributions to get
the NSPR 4.4.1 header files and shared libraries, which NSS 3.9
requires. NSPR 4.4.1 binary distributions are in
ftp://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.4.1/

Мне просто лень было качать их еще раз, в Mozilla уже и так есть.

спустя 1 час 16 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Владимир Палант[досье]
Читал. Спасибо. Мы скачали сразу. Не заработало. Правда под Дарвин это было 3.7

Попробую завтрана винде.

спустя 5 дней [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Владимир Палант[досье]
NSPR 4.4.1 пока не качал. Попробовал по Вашеей методологии. Ничего не получилось. Скопировал dll в bin. Программы не выдают никакого feedback вообще. Даже не ругаются при вызове с неправильными параметрами. В ReadMe тоже ни о какой особой инсталяции не пишется.

OS: Win XP

P.S> Может быть у Сергея что-то получилось?

спустя 22 минуты [обр] Сергей Чернышев(25/589)[досье]
Владимир Шапиро (Ronin)[досье]
У меня тоже не запустилось ничего - никакого output-а.
спустя 26 минут [обр] Владимир Палант(434/4445)[досье]
Может быть конфликт версий? У меня Mozilla 1.5, dll-ки соответственно от него. Придется вам все-таки качать NSPR...
спустя 5 часов [обр] Сергей Чернышев(25/589)[досье]
Владимир Палант[досье]
У меня 1.6, но результат тот же что и без dll-ек. Хоть бы ругалась на что-нибудь, зараза.
спустя 15 часов [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]
Владимир Палант[досье]

Привет!

Я скачал NSPR, скопировал содержимое его lib в nss/bin. Теперь команды стали говоритьт, но при первой же попытке создать базу получаю следующее:

C:\...\nss-3.9\bin>certutil.exe -N
certutil.exe: NSS_Initialize failed: security library: bad database.

скопировал cert8.db в bin

C:\Programme\mozilla.org\NSS\nss-3.9\bin>certutil.exe -L cert.db
certutil.exe: NSS_Initialize failed: security library: bad database.
спустя 4 дня [обр] Михаил[досье]

Описываю схему, которая заработала (WIN2000, Tomcat). Знаю, что в чем то повторяюсь, но постарался написать все в одном месте. Сам долго собирал все это в сети по кусочкам, может кому-то поможет.

Для начала архитектура. Она не обязательна, но, чтобы не внести ошибок, привожу то, что работает.

Делаю обычную xul-страничку с iframe. В iframe помещаю jsp-страницу, которая вычисляет абсолютный адрес подписанного кода и загружает его на свое место.

<%
    String rootURL = request.getRequestURL().toString().replaceFirst(request.getServletPath(), 

"");
    String signedURL = "jar:" + rootURL + "/xul/signed.jar!/signed.xul";
    response.sendRedirect(signedURL);
%>

Должен получиться примерно такой URL:
jar:http://myhost/myapplication/signed/signed.jar!/signed.xul

xul - директория, где лежит подписанный код;
signed.jar - jar, который подписывается;
signed.xul - xul-страница с js-скриптами.

После загрузки фрейма подписанным кодом к нему можно обращаться с основной страницы как к обычному iframe.

Дальше скачиваем nss (именно дебаговый вариант, основной почему-то у меня не заработал)
ftp://ftp.mozilla.org/pub/mozi......NSS_3_9_RTM/WINNT5.0_DBG.OBJD/
и библиотеки
ftp://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.2.2/

Создание сертификата и подписание кода.

  1. Прописываем пути к lib и bin пакетов в настройках ОС.
  2. Создаем директорию web с поддиректориями certificate, signed и xul
  3. В директории signed размещаем все файлы, которые нужно подписать.
  4. В директории certificate создаем базу данных:

...\web\certificate>certutil -N -d .
Система запросит пароль к базе, допустим мы назвали 12345678

  1. Создаем сертификат

...\web\certificate>signtool -G MyTestCert -d . -p 12345678
Ответим на вопросы, которые в основном опциональны

  1. Создадим jar и одновременно подпишем его

...\web\certificate>signtool -d . -k MyTestCert -p 12345678 -Z ..\xul\signed.jar ..\signed
при этом подписанный jar будет размещен в директории xul.

  1. На сервере с приложением прописываем mime-type = application/x-x509-ca-cert

Например для java-сервера указываем в web.xml

    <mime-mapping>
        <extension>cacert</extension>
        <mime-type>application/x-x509-ca-cert</mime-type>
    </mime-mapping>
  1. Где-то на странице даем для пользователя ссылку на файл x509.cacert. После вышеописанных действий этот файл появляется в директории certificate.

Со стороны разработчика на этом все.

Действия пользователя.

  1. По ссылке на странице (п.8) загрузить себе сертификат.
  2. В настройках броузера активировать этот сертификат.

Например, в случае Netscape:

Edit -> Preferences... -> Privacy & Security -> Certificates -> Manage Certuficates... -> Authorites

выбрать загруженный сертификат из открывшегося списка, нажать Edit, включить чекбокс "This certificate can identify software makers." Нажать "OK".

  1. Перезагрузить броузер, закрыв все его окна.
спустя 1 час 55 минут [обр] Михаил[досье]
Опечатка. Библиотеки загружались отсюда.
ftp://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.4.1/
спустя 6 часов [обр] Сергей Чернышев(25/589)[досье]
Михаил[досье]
Спасибо - обязательно попробую, хотя причем тут Java server я не понимаю, но разберемся...
спустя 8 часов [обр] Михаил[досье]
Сергей Чернышев[досье]
Для того, чтобы броузер понял расширение cacert у сертификата, нужно на сервере указать для этого расширения mime-type (п.7). На java-сервере (напр. Tomcat) это делается через web.xml.
спустя 1 день 4 часа [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Привет всем!

Краткое предварительное резюме. (Как я вижу ситуацию)

  1. signtool 1.3 от Netscape использовать нельзя. Он старый и сертификаты, подписанные им мозиллой воспринимаются нестабильно, либо вообще не воспринимаются.
  1. [[[

Работать с jarsigner очень просто, но выяснилось, что Netscape с ним не совместим ещё с давних времен: Bug 32879
]]]

  1. Заставить работать NSS Tools под XP по рецепту Владимира Паланта так и не удалось
  1. Приведенный работающий пример для win2000 не решает проблемы с XP.

На все это мною потрачено (если посмотреть на начало топика) почти три недели не особенно торопливых, но усердных поисков. Которые закончились НИЧЕМ.

Мне кажется, что рассматриваемый механизм сертификации и подписывания малопригоден на данный момент для какой-либо реальной разработки Remote XUL приложений.

спустя 40 минут [обр] Михаил[досье]

Владимир Шапиро (Ronin)[досье]
Привет.
Проверил.
Сервер WIN2000, Tomcat
Клиент WIN-XP, Netscape 7.1

Работает без проблем.

спустя 13 минут [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Если не удается под XP, то делайте "реальную разработку" на 2000. Это у клиента нельзя ОС поменять...
спустя 2 минуты [обр] Сергей Чернышев(25/589)[досье]
Владимир Шапиро (Ronin)[досье]
Давайте все-таки добьем это и тогда у остальных будет уходить совсем не 3 недели, а пару часов - вопрос только в скачивании правильного софта.
спустя 43 минуты [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Михаил[досье]

Если не удается под XP, то делайте "реальную разработку" на 2000

Собственно ради чего нам менять платформу? Ради того, что NSS (пока) криво работает на XP?
При наличие здоровой альтернативы XmlHttpRequest-а проще похоронить технологии подписывания скриптов для remote приложений. Пока все к этому и идет. (см. верх топика)

Сергей Чернышев[досье]
Я только за. Знать бы еще какой софт правильный...

спустя 10 минут [обр] Сергей Чернышев(25/589)[досье]
Владимир Шапиро (Ronin)[досье]
Подпись нужна - это важная вещь - ведь не только XmlHttpRequest полезен во всем XPCOM-е. У меня описаный Владимиром Палантом метод и на win2k не работал, так что дело, скорее всего не в xp/win2k а в чем-то другом.
спустя 5 минут [обр] Михаил[досье]
Если можно обойтись без подписания, то, разумеется, не стоит и связываться. Тем более, что не всякий пользователь захочет и сможет что-то менять в настройках. Я писал для тех, кому без подписания никак. В частности, мне самому приходится работать с файлами, D&D... В этом случае альтернативы подписанию нет. При этом не грех и платформу поменять.
спустя 7 минут [обр] Михаил[досье]
Кстати, как раз именно для XMLHttpRequest подпись обычно не нужна. Она требуется только если вы отправляете файл. Да и то, прежде всего, не для того, чтобы отправить, а чтобы прочитать.
спустя 36 секунд [обр] Сергей Чернышев(25/589)[досье]
Михаил[досье]
А зачем что-то в настройках менять???? Если подписано не нашим сертификатом, а купленым, то ничего менять не нужно будет - нужно будет только сказать что согласен разрешить доступ и все.
спустя 11 минут [обр] Михаил[досье]
Возможно. С купленным еще не работал.
Насчет XMLHttpRequest, может быть, тоже был неточен. Подпись однозначно не нужна, если отправлять "простой" запрос на "свой" сервер. Если на "чужой" - не пробовал.
спустя 17 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]
Михаил[досье]
На чужой всегда можно написать гейт на своем. :)
спустя 5 минут [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Конечно. Т.е. конкретно Вы, если нужен только XMLHttpRequest, можете, видимо, ничего не подписывать.
спустя 27 минут [обр] Сергей Чернышев(25/589)[досье]
Михаил[досье]
Вы уверены, что права не нужны для обращения к XPCOM? Мне казалось что проблема была не в коннекте к серверу а в отсутствии прав на создание объекта.
спустя 15 минут [обр] Михаил[досье]
Для создания XMLHttpRequest никаких особых прав не требуется
http://jibbering.com/2002/4/httprequest.html
спустя 44 минуты [обр] Владимир Палант(434/4445)[досье]

Владимир Шапиро (Ronin)[досье]
Я пробовал под XP и у меня всё работало. Операционная система тут явно ни при чём.

Сергей Чернышев[досье]
XMLHttpRequest можно создать без XPCOM через new XMLHttpRequest(), никакие особые права на это не нужны. Они требуются только для соединения с "чужим" сервером.

спустя 40 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]
Владимир Палант[досье]
Что же тогда? Не та версия NSS? Вроде я качал прямо по ссылке.
Попробовал уже на двух системах XP. Не работает.
certutil -N
certutil.exe: NSS_Initialize failed: security library: bad database
спустя 1 час 19 минут [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Проверил еще раз. Действительно, при запуске из командной строки проблемы. Я сам делал из bat-файла. Повторил - нормально.
спустя 2 минуты [обр] Владимир Палант(434/4445)[досье]
bat-файл? Я из cmd запускал...
спустя 21 минуту [обр] Михаил[досье]
Из cmd у меня получается то же, что у Шапиро.
спустя 1 час 1 минуту [обр] Михаил[досье]

Наврал. Наверное устал.
Ошибка из cmd возникает, если команду набрать с ошибкой:

certutil -N d .

,
если набрать правильно:

certutil -N -d .

то все нормально

certutil -N

у меня тоже не работает.

спустя 12 часов [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Михаил[досье]

Так. Похоже мы продвинулись. Сегодня вечером доведу Мировой Эксперимент до конца. Сообщу о результатах.

спустя 1 день 4 часа [обр] Владимир Шапиро (Ronin)(0/2)[досье]
сообщение промодерировано

Михаил[досье]
Привет!

Я повторил практически все шаги кроме iframe (вызываю скрипт из командной строки)

Кроме того помимо mime-type я пробовал импортировать сертификат руками.

Все создалось, но при работе с xulфайлов в jar архивевозникает следующая ошибка:
RDF не подгружается в дерево,хотя rdf файл равно как и .js файл лежат в том же архиве.

Возможно нужен какой-то особый синтаксис для указания пути?

//things.xul
<window id="treeRDF" title="RDF Tree"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script src="things.js"></script>

<label value="Things in my house:"/>

<tree id="test-tree" flex="1" width="350" height="200"
      datasources="things.rdf" ref="urn:things:root">

  <treecols>
    <treecol id="name" label="Name" primary="true" flex="1"/>
    <treecol id="material" label="Material" flex="1"/>
  </treecols>

  <template>
    <treechildren>
      <treeitem uri="rdf:*">
        <treerow>
          <treecell label="rdf:http://www.xulplanet.com/rdf/example#name"/>
          <treecell label="rdf:http://www.xulplanet.com/rdf/example#material"/>
        </treerow>
      </treeitem>
    </treechildren>
  </template>
</tree>

<hbox align="right">

<button 
   label="Refresh" 
   onclick="refreshTree(document.getElementById('test-tree'))"
   style="width: 200px"/>
<spacer flex="1"/>
<button 
   label="Rewrite" 
   onclick="rewriteTree(document.getElementById('test-tree'))"
   style="width: 200px"/>
</hbox>
</window>
спустя 1 час 17 минут [обр] Михаил[досье]

Привет.
Возможно дело не в адресе.
Как я вижу, если rdf находится в jar-e, то броузер не воспринимает его как xml-файл, несмотря на то, что соотв. mime-type (text/xml)
http://www.xulplanet.com/tutorials/xulqa/q_remoterdf.html
у меня прописан.

С другой стороны. Возвращаемся к тому, надо ли Вам вообще подписывать? Удаленный RDF работает безо всяких подписей (см. ту же ссылку).

спустя 25 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Михаил[досье]
Привет! Да, есть такое дело. Не распознает, гад.

А подписывать надо, ибо перезагрузить RDF (для отображения изменений) без доступа к

 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

не получится. См топик: http://xpoint.ru/forums/programming/XUL/thread/23936.xhtml

спустя 15 минут [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Ну, что же делать... Я пока кроме, как не использовать RDF, больше ничего предложить не могу.
спустя 7 минут [обр] Владимир Палант(434/4445)[досье]
Михаил[досье]
Ну есть же ещё вариант — не держать RDF в JAR'е, ему-то там точно делать нечего... Но вообще-то странно, ведь при аналогичной операции, когда JAR лежит на file://, всё проходит.
спустя 8 минут [обр] Михаил[досье]
Владимир Палант[досье]
Это я уже попробовал. По крайней мере у меня не вышло. Внутри jar-а писал абсолютный адрес к rdf, который снаружи, - не подгружается.
спустя 14 минут [обр] Михаил[досье]
А если такой вариант?
XUL и RDF держать открыто. Сделать подписанную страничку, поместить ее в iframe. Потом передать туда объект и отрефрешить?
спустя 24 минуты [обр] Владимир Палант(434/4445)[досье]
Либо не будет прав доступа к iframe, либо страничка в нем не получит привилегий — такие штуки не проходят (mixed content).
спустя 7 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Михаил[досье]

Внутри jar-а писал абсолютный адрес к rdf, который снаружи, - не подгружается.

Соответственно даже если этот RDF генерируется с помощью сервером (например PHP или JSP), то тоже не прокатит.

Я так понимаю, что php файлы, генерирующие RDF в jar запихивать бесполезно?

спустя 3 минуты [обр] Михаил[досье]
Вообще-то у меня именно такая аритектура. И доступ нормальный, и снаружи на закрытую страницу, и наоборот. И на странице привилегии даются все, какие надо. Не уверен, что в данном случае все будет работать, но я бы попробовал.
спустя 2 минуты [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Не берусь судить, я с RDF работал мало, стараюсь обходиться.
спустя 3 часа 15 минут [обр] Сергей Чернышев(25/589)[досье]

Владимир Шапиро (Ronin)[досье]
А почему без

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

Вы же все подписали - по идее, теперь этот доступ у вас должен быть.

спустя 13 часов [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]
Замкнутый круг

Без подписи - доступ к dsource не работает
С подписью не подгружается dsource (RDF) (не скриптом,а просто изначальнов XUL элемент)

спустя 2 часа 45 минут [обр] Михаил[досье]
Владимир Шапиро (Ronin)[досье]
Первое решение для получения динамического контента в дереве напрашивается сразу:
Отказаться от RDF. На сервере формируете xml, передаете на клиента по XMLHttpRequest, там парсите (DOMParser) и рисуете дерево. Немножко больше кода, зато все работает и нужен сертификат. И еще. Я не замечал, чтобы XMLHttpRequest где то кэшировался. Может просто не попадал на такой тупой прокси, но все же...
Что касается обязательного RDF, то посмотрю в выходные.
спустя 5 минут [обр] Михаил[досье]
"и нужен сертификат" -> "и НЕ нужен сертификат"
спустя 12 минут [обр] Михаил[досье]
Сергей Чернышев[досье]
"Несколько интересных предложений" могут растянуться надолго - тема слишком неопределенная.
С подписями мы вроде разобрались. Может пора выделить отдельную тему? Или перенести туда, где RDF уже обсуждался?
спустя 2 часа 9 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Михаил[досье]
По XmlHttpRequest я полностью согласен.
Я параллельно разбираюсь с MAB, но хотел пройти альтернативную ветку с подписыванием.

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

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

спустя 2 часа 18 минут [обр] Сергей Чернышев(25/589)[досье]
Владимир Шапиро (Ronin)[досье]
Кстати, FAQ можно наполнять самим - для этого есть Wiki (смотри ссылку в FAQ этого форума).
спустя 29 минут [обр] Владимир Шапиро (Ronin)(0/2)[досье]

Сергей Чернышев[досье]
Ок, хотя на Wiki у меня аллергия :)

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

  1. Работа с RDF (как видим, не подходит)
  2. Drag and DRop
  3. ...
спустя 1 час 29 минут [обр] Владимир Палант(434/4445)[досье]
  1. Не уверен, что не подходит. Точнее вполне уверен, что подходит, если правильно воспользоваться — сначала запросить права, а уже потом загружать RDF. Сделаю пример, когда будет время...
2-... Всё, что требует доступа к компонентам XPCOM (типа доступа к диску пользователя, изменение установок браузера, итд.), а также стандартные операции с ограниченными правами (в первую очередь доступ к другим серверам — через XMLHttpRequest и прочее).
спустя 1 день 16 часов [обр] Михаил[досье]

Итак. Если уж надо обязательно использовать RDF.

Во первых проверил схему, которую я предлагал выше (2004-03-24 19:32:15).
Единственное отличие в том, что не передавал объект снаружи, а только вызывал снаружи внутреннюю ф-цию, которая сама забирала объект.

function callRefresh()
{
   try
   {
      window.frames.iframe_signed.refreshTree();
   }
   catch (err)
   {
      alert("function callRefresh\n" + err)
   }
}

Внутренняя ф-ция (использовал топик "Проблема с безопасностью при подгрузки RDF (давайте сделаем FAQ)"):

function refreshTree()
{
   try
   {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      var aTree = parent.document.getElementById("aTree");
        
      var dsource;
      var sources = aTree.database.GetDataSources();

      if (sources.hasMoreElements())
      {
         dsource = sources.getNext();
         aTree.database.RemoveDataSource(dsource);
      }

      var RDF = Components .classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); 
      var remoteRdfUrl = "http://localhost/adwatchex_rdf/xul/animals.rdf";
      dsource = RDF.GetDataSource(remoteRdfUrl + "?" + Math.random());
      aTree.database.AddDataSource(dsource);
      aTree.builder.rebuild();
   }
   catch (err)
   {
      alert("function refreshTree\n" + err)
   }
}

Работает. Контент дерева обновляется правильно (между вызовами refreshTree просто менял animals.rdf руками).
Некоторое неудовлетворение оставляет то, что, если сделать Refresh основной страницы (из броузера), то внутренняя ф-ция больше не вызывается:
"Permission denied to get property Window.refreshTree". Придется с этим разбираться отдельно.

Второй вариант. Перенес дерево с основной страницы на подписанную. В строке вызова дерева убрал "parent". После вызова ф-ции refreshTree конент благополучно рисуется. Т.е. достаточно вставить вызов в window.onload и все.

спустя 43 минуты [обр] Михаил[досье]
Владимир Палант[досье]
"Второй вариант" - это, вероятно, то, что Вы имели в виду?
спустя 1 час 16 минут [обр] Владимир Палант(434/4445)[досье]

Михаил[досье]
Не уверен, надо будет самому попробовать.

Нашёл официальную информацию на тему подписывания приложений (сам ещё полностью не прочитал): Certificate Authorities and Digital Signatures

спустя 11 месяцев [обр] Владимир Палант(434/4445)[досье]
Появилась новая статья на эту тему: http://www.mozdevgroup.com/docs/pete/Signing-an-XPI.html
спустя 20 часов [обр] Сергей Чернышев(25/589)[досье]
Блин, ну когда же они начнут писать даты написания статьи где-нибудь?
спустя 1 час 7 минут [обр] Владимир Палант(434/4445)[досье]
Вроде бы я где-то видел 15 февраля... Конечно, может быть я просто что-то путаю, но статья свежая, это точно.
спустя 42 минуты [обр] Сергей Чернышев(25/589)[досье]
Владимир Палант[досье]
А где ссылку на нее нашли?
спустя 3 часа 50 минут [обр] Владимир Палант(434/4445)[досье]
спустя 5 месяцев [обр] ldv[досье]
Не стоит использовать RDF в удаленных XUL приложениях. Вместо этого предлагается
использовать собственный формат XML и объект XMLHttpRequest, чтобы работать с серверными
скриптами...
Интерфейсы RDF не приспособлены для использования на удаленных сайтах.
Работа в этом направлении ведется...
Добрый день! Изменилось ли что-либо в этом вопросе за полтора года???
Или все рекомендации остались актуальными?
спустя 1 день 7 часов [обр] Владимир Палант(434/4445)[досье]
Работа над переделкой RDF-интерфейсов всё ещё ведётся. Ожидается, что первые результаты мы увидим в Gecko 1.9.
спустя 4 часа [обр] ldv[досье]
Спасибо, Владимир.
Powered by POEM™ Engine Copyright © 2002-2005