Мне удалось собрать решение с помощью nsscapi.dll, скомпилированного из сборки nss-3.13.6. Затем я скопировал зависимости дополнительных библиотек в свою сборку nss-3.20 для использования в моем общем приложении.
nsscapi.dll для подписи фрагмента кода представляет собой рудиментарный интерфейс PKCS11 для модуля Capi для NSS. По-видимому, у него есть проблемы с утечкой памяти, но, поскольку областью моего использования NSS является просто время от времени подписывать файл XPI, я могу время от времени перезапускать этот модуль.
Решение включает в себя: сборку nss-3.20 с помощью mozilla-build и «создание nss_build_all» из подпапки «nss» этого пакета.
Распространяемая версия Visual Studio C++ 2015 x86 (32-разрядная версия, поскольку 64-разрядная версия не работает для этого проекта).
Интерфейс Thales CAPI для Windows (да, у них есть прямой модуль PKCS11, но для моей индивидуальной среды доступны только CAPI и хранилище ключей Java, поэтому я не использовал модуль Thales PKCS11)
Переменная среды PATH была изменена, чтобы указывать на папки bin и lib в сборке NSS.
nsscapi.dll, расположенный в папке nss-3.20\dist\WIN95xxx\lib\, был загружен в сборку NSS с помощью «modutil»:
modutil -dbdir "c:\apps\certs" -add "capi" -libfile "C:\Apps\nss-3.20\dist\WIN954.0_DBG.OBJ\lib\nsscapi.dll" -mechanisms RSA:DSA:RC2:RANDOM
Я уже настроил Thales для заполнения сертификатов подписи кода в CAPI, поэтому у меня уже были сертификаты подписи кода в CAPI.
Мне пришлось использовать оснастку «сертификаты» в mmc.exe для просмотра «личного» хранилища сертификатов текущего пользователя. Затем измените «дружественное» имя сертификата подписи кода, которое я хочу использовать, на что-то значимое, например «тест». Это сделано для того, чтобы модуль NSSCAPI мог однозначно идентифицировать этот сертификат в списке, который ему виден.
После этого шага по изменению понятного имени в одном из моих сертификатов подписи тестового кода я использовал средство подписи NSS для отображения списка доступных сертификатов:
signtool -d "c:\apps\certs" -L
Я распаковал файл «test.xpi» в подпапку «test» папки «c:\apps\certs», имя которой я только что придумал, вы можете использовать то, что хотите.
В моем списке была запись:
- Магазин сертификатов Microsoft: тест
* означает, что это действительный сертификат, который можно использовать для кодирования в NSS.
Затем я использовал signtool для подписи кода в моем тестовом файле XPI:
signtool -d "C:\Users\mlawson\AppData\Roaming\Mozilla\Firefox\Profiles\4jnnnb1y.default" -k "Microsoft Certificate Store":"test" test/
С успехом!
Заранее извиняюсь, если мое форматирование этого ответа отключено. Это мой первый раз, когда я публикую сообщение в переполнении стека и отвечаю на сообщение (даже если оно было моим собственным). Я умолчал о некоторых высокоуровневых шагах в этом посте, чтобы сделать его кратким, поскольку некоторые из более важных «как» делать такие вещи, как создание NSS, уже задокументированы на сайте Mozilla. Конфигурации, связанные с Thales, задокументированы Thales, и не имеют отношения к объяснению того, как это настроено, поскольку мой вариант использования их интерфейса CAPI является пользовательским и проприетарным. Но общая концепция использования nsscapi.dll и этого решения действительно применима ко всему, что связано с MSCAPI, и возможность использовать это с NSS удобна. nsscapi.dll также можно загрузить в «устройства безопасности» firefox в качестве модуля, чтобы firefox также мог использовать CAPI, хотя я точно не знаю, насколько хорошо...
person
Jkristoff
schedule
08.10.2015