Я смог собрать решение, используя nsscapi.dll, скомпилированный из сборки nss-3.13.6. Затем я скопировал дополнительные зависимости библиотек к моей сборке nss-3.20 для использования в моем общем приложении.
nsscapi.dll с целью подписания фрагмента кода является элементарным интерфейсом PKCS11 для Capi для NSS. У него, по-видимому, проблемы с утечкой памяти, но поскольку область моего использования NSS - это просто подписать файл XPI, я нормально с этим перезапускаю этот модуль.
Решение включает в себя: nss-3.20, построенный с использованием mozilla-build, и «make nss_build_all» из подпапки «nss» этого пакета.
Visual Studio C++ Распространяемая версия 2015 x86 (32 бит, поскольку 64 бит не работает для этого проекта).
Thales CAPI интерфейс окна (да у них есть прямой модуль PKCS11, но для моей настроенной среде только АЛО и Java хранилища ключей варианты, так что я не использовал модуль Thales PKCS11)
Эта переменная была изменен, чтобы указать на папки bin и lib в сборке NSS.
nsscapi.dll расположен в NSS-3,20 \ расстояние \ WIN95xxx \ Lib \ папка была загружена в НСС построена с использованием "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 может однозначно идентифицировать этот сертификат в списке, который имеет видимость.
После этого шага изменения понятного имени на одном из моих подписи сертификатов тестирования коды, я использовал SignTool NSS, чтобы отобразить список доступных сертификатов:
signtool -d "c:\apps\certs" -L
Я распаковал файл «test.xpi» в подпапку «test» из «c: \ apps \ certs», которая является подпапкой, которую я только что нарисовал, вы можете использовать то, что хотите.
Мой список содержал запись:
- Microsoft Certificate Store: тест
* означает, что действительный сертификат, который может быть использован для CodeSigning в НСС
тогда я 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, хотя я не знаю, насколько точно ...