Настроить NSS Signtool для работы с Thales HSM?

У меня проблема. Моей организации необходимо выполнить подписание кода для типа файлов XPI. Сертификаты и их закрытые ключи ДОЛЖНЫ быть защищены аппаратным модулем безопасности. Это из соображений безопасности.

Существующий инструмент NSS Signtool, предоставленный Mozilla, мы не смогли найти способ получить этот инструмент, чтобы распознать хранилище ключей Java, CSP в Windows или связку ключей в Mac. Все исследованные решения указывают на необходимость копирования ключа в базу данных программного обеспечения, которую NSS Signtool использует по умолчанию.

Мне нужно подписывать типы файлов XPI, и причина, по которой я пытаюсь найти решение, которое работает с Java, Windows CSP или цепочкой ключей Mac, заключается в том, что моя существующая технология HSM от Thales имеет эти 3 варианта в качестве интерфейсов для связи с модулем. .

Я видел, что существует файл на основе Java под названием XPISigner, но решение больше не поддерживается, и единственная найденная нами версия работает исключительно с Luna HSM, но не совместима с современными версиями Java.

Кому-нибудь удалось получить защищенный ключ HSM для работы с NSS Signtool? Или был ли какой-либо механизм для интеграции NSS Signtool с хранилищем ключей Java? (Идея с опцией java заключается в том, что я могу затем манипулировать этим решением для работы с моим HSM)

Спасибо!


person Jkristoff    schedule 05.10.2015    source источник


Ответы (1)


Мне удалось собрать решение с помощью 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