Настроить NSS Signtool для работы с Thales HSM?
У меня проблема. Моя организация должна выполнить подписание кода для типа файла XPI. Сертификаты и их закрытые ключи ДОЛЖНЫ быть защищены модулем защиты оборудования. Это из соображений безопасности.
В существующем NSS Signtool, предоставленном Mozilla, мы не смогли найти способ получить этот инструмент, распознающий хранилище ключей Java, CSP в Windows или связку ключей в Mac. Все исследованные решения указывают на необходимость копирования ключа в программную базу данных, которую NSS Signtool настроил для использования по умолчанию.
Мне нужно подписать типы файлов XPI, и причина, по которой я пытаюсь найти решение, которое работает с Java, Windows CSP или Mac Keychain, заключается в том, что моя существующая технология HSM от Thales имеет эти 3 варианта в качестве интерфейсов для взаимодействия с модулем.,
Я обнаружил, что существует файл на основе Java под названием XPISigner, но решение больше не поддерживается, и единственная найденная нами версия для этого работает исключительно с Luna HSM таким образом, который не совместим с сегодняшними версиями Java.
Кому-нибудь удалось получить защищенный ключ HSM для работы с NSS Signtool? Или был какой-то механизм для интеграции NSS Signtool с хранилищем ключей Java? (Идея с опцией java заключается в том, чтобы я мог манипулировать указанным решением для работы с моим HSM)
Спасибо!
1 ответ
Я смог собрать решение, используя 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++ Redistributable 2015 x86 версия (32-битная как 64-битная не работает для этого проекта).
Интерфейс Thales CAPI для окон (да, у них есть прямой модуль 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 для просмотра текущего хранилища сертификатов "Персональный" пользователя. Затем измените "дружественное" имя сертификата для подписи кода, которое я хочу использовать, на что-то вроде "test". Это сделано для того, чтобы модуль NSSCAPI мог однозначно идентифицировать этот сертификат в списке, для которого есть видимость.
После этого шага изменения понятного имени в одном из моих сертификатов для подписи тестового кода я использовал инструмент NSS signtool для отображения списка доступных сертификатов:
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, хотя я не знаю, насколько точно...