Подписание данных с помощью PKCS # 7 (непрозрачный) для Интернета - PullRequest
2 голосов
/ 10 сентября 2010

Аннотация : Есть ли способ, либо с помощью плагина Firefox, либо с помощью других средств эмулировать javascript crypto.signText, используя непрозрачный алгоритм вместо отсоединенного (что он в настоящее время делает?) Для подписания произвольных данных. Это включает в себя диалоговое окно и доступ к хранилищу сертификатов Firefox. Кроме того, документация signText , по-видимому, не обновлялась с 1998 года, возможно ли, что мои потребности были удовлетворены с тех пор, и я их упускаю?

Любые ссылки, советы и т. Д. С благодарностью.


Я работаю над проектом, в котором мне нужно иметь возможность подписывать данные, используя PKCS7 (CMS) в Firefox, используя сертификат из магазина браузеров.

Моей первой попыткой, и я подумал, что моим спасителем была window.crypto.signText (), которая делает именно то, что я хочу (отображает текст для подписи, предлагает выбрать сертификат и подписывает текст), за исключением того, что это отделенный и непрозрачный (то есть подписанный текст не включен в сообщение).

Я искал альтернативы, и документация кажется довольно легкой. Мне нужно только использовать Firefox, и поэтому есть возможность использовать плагин для этого.

Если я правильно понимаю, что я читаю правильно, NSS (базовая служба безопасности Firefox) поддерживает pkcs7, но это просто не доступно для Javascript, верно? Есть ли способ сделать это через XPCom? Из того, что я прочитал, кажется, вы могли получить доступ к функции как то, что мне нужно (PKCS11), но то, что мне было нужно, было недоступно.

Я также только что обнаружил, что поддерживаются js c-types, поэтому я мог напрямую использовать библиотеку nss (или, возможно, openssl) для обработки подписи.

Любой из этих параметров выглядит нормально, но тогда я проигрываю в интерфейсе. Мне было трудно найти какую-либо документацию о доступе к хранилищу сертификатов или дублировать окно signText.

Спасибо

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Это не совсем то, что вы пытаетесь сделать, но вы, возможно, захотите проверить JavaScript-проект с открытым исходным кодом под названием Forge.Он предоставляет JavaScript для подписи / проверки текста и т. Д. В настоящее время он используется для демонстрации технологии, называемой WebID.Для WebID требуются сертификаты SSL - которые Forge хранит (вместе со связанным закрытым ключом), используя локальное флэш-хранилище или новое HTML5 WebStorage.Затем сертификаты используются при выполнении TLS на стороне клиента.

В демоверсии есть опция для импорта сертификата из цепочки для ключей браузера, однако в данный момент она включает ручной процесс (экспорт из браузера как PKCS12).и импортировать как PEM).Это может быть потенциально улучшено в будущем.

В любом случае, вот URL-адреса демо-версии WebID и источника:

https://webid.digitalbazaar.com/manage/

http://github.com/digitalbazaar/forge

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

http://digitalbazaar.com/2010/08/07/webid/

0 голосов
/ 27 сентября 2010

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

Во-первых, очевидно, что crypto.signText не работает, он отсоединен (отсюда и вопрос), к тому же он не очень хорошподписывание двоичных данных (для меня это тоже требование).

Следующей мыслью было использование расширения XPCOM api, предоставляемого firefox.Там есть много хороших криптовалют, доступных для использования там.К сожалению, я не смог найти никаких доказательств в источнике или документации, что подпись с использованием интерфейса XPCOM предоставила бы мне непрозрачную подпись.

Так что, похоже, нам нужно расширить переданный javascript в java.Первоначально я собирался попробовать JSS, однако стало очевидно, что JSS на самом деле не нужен, встроенных функций шифрования будет достаточно.

Поэтому я написал апплет, основанный на java.security и sun.security.(собственность).Есть небольшой кусочек javascript, который передает каталог профиля пользователя в апплет (чтобы я мог найти базу данных сертификатов в профиле пользователя), а затем я беру закрытый ключ.данные и подпишите прикрепленное (непрозрачное) сообщение pkcs7.

Там есть фантастическая документация, расположенная Здесь .

...