Windows Provider
sslTrus предоставляет два способа интеграции с Windows Provider: KSP (Key Storage Provider) и CSP (Cryptographic Service Provider).
С помощью Windows Provider такие программы, как Microsoft SignTool, Visual Studio, MSBuild, инструменты для создания установочных пакетов и другое программное обеспечение, поддерживающее криптографические интерфейсы Windows, могут использовать облачные возможности подписи кода sslTrus.
Закрытый ключ подписи всегда хранится в облачном HSM, поэтому нет необходимости развёртывать файл закрытого ключа на локальном компьютере.
Установка, настройка и обслуживание KSP и CSP выполняются через sslTrus SignTool CLI, который можно скачать со страницы выпусков клиента sslTrus.
KSP и CSP
KSP и CSP соответствуют двум поколениям криптографических интерфейсов Windows:
| Provider | Интерфейс Windows | Сценарий использования |
|---|---|---|
| KSP | CNG (Cryptography API: Next Generation) | Современные приложения Windows и инструменты подписи; предпочтительный выбор |
| CSP | CryptoAPI | Устаревшие приложения или программное обеспечение, явно требующее использования CSP |
Для новых сценариев интеграции с Windows обычно предпочтительнее использовать KSP.
Используйте CSP только тогда, когда целевое программное обеспечение не поддерживает KSP или явно требует использования традиционного провайдера CryptoAPI.
KSP
KSP — это Key Storage Provider на основе Windows CNG.
После установки sslTrus KSP приложения Windows, поддерживающие CNG, могут вызывать удалённый сервис подписи кода через стандартный интерфейс ключей Windows.
Локальный провайдер принимает запрос на подпись от приложения и отправляет дайджест, который необходимо подписать, в удалённый сервис подписи кода; фактическая операция с закрытым ключом выполняется в облачном HSM.
Сценарии использования
KSP подходит для:
- Microsoft SignTool.
- Visual Studio.
- MSBuild.
- Программного обеспечения сборки и подписи, поддерживающего Windows CNG.
- Приложений, которым необходимо подключаться к удалённому закрытому ключу через стандартный Windows Provider.
Установка KSP
Выполните в терминале администратора:
signtool ksp install
Эта команда установит и зарегистрирует:
sslTrus Key Storage Provider
Установка KSP включает регистрацию системного провайдера и системный каталог Windows, поэтому обычно требуются права администратора.
Добавление конфигурации сертификата
Выполните:
signtool ksp add
Согласно подсказке введите:
Access Key
Access Secret
Certificate Code
Клиент получает соответствующий сертификат от удалённого сервиса подписи кода и сохраняет адрес удалённого сервиса, учётные данные доступа и конфигурацию сертификата.
Если используется среда NICSRS (www.nicsrs.com), необходимо добавить --address nicsrs:
signtool ksp add --address nicsrs
Регистрация сертификата
После завершения настройки KSP необходимо зарегистрировать сертификат для подписи кода в хранилище сертификатов Windows и связать его с провайдером KSP.
Выполните:
signtool ksp register
По умолчанию регистрация выполняется в личное хранилище сертификатов текущего пользователя.
Если требуется регистрация в хранилище сертификатов LocalMachine:
signtool ksp register --store local-machine
После завершения регистрации Windows распознает соответствующий сертификат как имеющий доступный закрытый ключ, однако фактический закрытый ключ по-прежнему хранится в облачном HSM.
Использование Microsoft SignTool
После настройки KSP можно использовать Microsoft signtool.exe из Windows SDK для подписи файлов.
Например:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f "C:\ProgramData\sslTrusKSP\CERT_CODE.crt" ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
".\app.exe"
Основные параметры:
| Параметр | Описание |
|---|---|
/csp | Указывает поставщика sslTrus KSP |
/kc | Указывает контейнер ключа, соответствующий номеру сертификата |
/f | Указывает сертификат для подписи кода |
/fd | Указывает алгоритм хеширования файла |
/tr | Указывает сервер меток времени RFC 3161 |
/td | Указывает алгоритм хеширования метки времени |
Если необходимо добавить подпись SHA-1 к уже существующей подписи, можно использовать параметр /as:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f "C:\ProgramData\sslTrusKSP\CERT_CODE.crt" ^
/fd SHA1 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
/as ^
".\app.exe"
Microsoft signtool.exe будет вызывать sslTrus KSP через Windows CNG, после чего KSP выполнит удалённую подпись закрытым ключом.
Управление KSP
Просмотр уже настроенных KSP:
signtool ksp list
Удалить конфигурацию:
signtool ksp del
Отменить привязку сертификата к KSP:
signtool ksp deregister
Удалите KSP:
signtool ksp uninstall
Перед удалением Provider убедитесь, что ни одно другое приложение Windows больше не зависит от этого Provider.
CSP
CSP — это Cryptographic Service Provider, используемый традиционным Windows CryptoAPI.
Он в основном применяется в процессах подписи Windows, где необходимо указать Provider и контейнер ключей через параметры /csp и /kc. sslTrus CSP устанавливается и обслуживается клиентом, а фактическое подписание файла по-прежнему выполняется Microsoft signtool.exe из Windows SDK.
Сценарии применения
CSP подходит для:
- программного обеспечения Windows, поддерживающего только традиционный CryptoAPI;
- инструментов подписи, явно требующих указания CSP Provider;
- сред, где необходимо выполнять подпись с помощью Microsoft SignTool и параметров
/cspи/kc; - устаревших приложений, которые не могут использовать Windows CNG / KSP.
Для новых систем, где KSP работает нормально, обычно дополнительно использовать CSP не требуется.
Установка CSP
Выполните в терминале администратора:
signtool csp install
В процессе установки будет зарегистрировано:
sslTrus Cryptographic Service Provider
и установите DLL поставщика в систему Windows.
Типы поставщиков CSP:
PROV_RSA_AES
Локальная конфигурация по умолчанию сохраняется в:
%ProgramData%\sslTrusKSP
Файл конфигурации защищен с помощью Windows DPAPI.
Если необходимо одновременно установить KSP, можно выполнить:
signtool csp install --with-ksp
Добавление конфигурации сертификата
Выполните:
signtool csp add
Согласно подсказке введите:
Access Key
Access Secret
Certificate Code
После завершения добавления клиент загрузит соответствующий сертификат и сохранит его в:
%ProgramData%\sslTrusKSP\CERT_CODE.crt
При этом CERT_CODE одновременно используется как идентификатор удалённого сертификата и как имя контейнера ключа, которое в дальнейшем применяется в Microsoft SignTool.
Если используется среда NICSRS (www.nicsrs.com), необходимо добавить --address nicsrs:
signtool csp add --address nicsrs
Регистрация сертификата
По умолчанию сертификат регистрируется в личном хранилище сертификатов текущего пользователя:
signtool csp register
Если требуется регистрация в LocalMachine:
signtool csp register --store local-machine
Поддерживаемые хранилища сертификатов:
| Параметр | Хранилище сертификатов Windows |
|---|---|
current-user | CurrentUser\My |
local-machine | LocalMachine\My |
После завершения регистрации диспетчер сертификатов Windows покажет, что у соответствующего сертификата есть связанный закрытый ключ, однако фактически закрытый ключ по-прежнему находится в облачном HSM.
Использование Microsoft SignTool
При подписи через CSP необходимо явно указать Provider, контейнер ключа и файл сертификата:
signtool.exe sign /v ^
/csp "sslTrus Cryptographic Service Provider" ^
/kc CERT_CODE ^
/f "C:\ProgramData\sslTrusKSP\CERT_CODE.crt" ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
".\app.exe"
Основные параметры:
| Параметр | Описание |
|---|---|
/csp | Указывает провайдера sslTrus CSP |
/kc | Указывает контейнер ключа, соответствующий номеру сертификата |
/f | Указывает сертификат для подписи кода |
/fd | Указывает алгоритм хеширования файла |
/tr | Указывает сервер меток времени RFC 3161 |
/td | Указывает алгоритм хеширования для метки времени |
Текущий интерфейс удалённой подписи поддерживает алгоритмы хеширования SHA1 и SHA256. В новых сценариях подписи следует优先 использовать SHA256; SHA1 применяйте только для совместимости со старыми системами.
Проверка подписи
После завершения подписи для проверки можно использовать Microsoft SignTool:
signtool.exe verify /pa /v ".\app.exe"
Проверка подписи не вызывает повторно удалённый закрытый ключ и не создаёт новых операций подписания.
Управление CSP
Просмотр существующей конфигурации:
signtool csp list
Удалить определенную конфигурацию сертификата:
signtool csp del
Отменить привязку закрытого ключа сертификата к CSP:
signtool csp deregister
Удаление Provider:
signtool csp uninstall
Удаление конфигурации CSP не приводит к автоматическому удалению уже загруженных файлов сертификатов. Если соответствующие сертификаты и конфигурации больше не используются, перед очисткой убедитесь, что от них не зависят другие Provider.
KSP или CSP
Если нет особых требований к совместимости, можно выбирать следующим образом:
| Сценарий | Рекомендация |
|---|---|
| Новая среда подписи Windows | KSP |
| Поддержка Windows CNG | KSP |
| Современные инструменты Windows, такие как Microsoft SignTool | KSP |
| Программное обеспечение явно требует CSP | CSP |
| Традиционные приложения CryptoAPI | CSP |
Инструменты требуют использования /csp и /kc | CSP |
Основное различие между KSP и CSP заключается в разных интерфейсах криптографического Provider, используемых Windows; модель безопасности удалённого закрытого ключа остаётся одинаковой.
Независимо от того, используется ли KSP или CSP, закрытый ключ для подписи кода не сохраняется на локальном клиенте.
Количество подписей
Количество подписей Windows Provider рассчитывается по фактически выполненным удалённым действиям подписи на нижнем уровне.
Например:
SHA256 签名一次 = 1 次
Если для одного и того же файла сначала выполнена подпись SHA256, а затем добавляется ещё одна подпись, это снова вызовет операцию с удалённым закрытым ключом, поэтому их необходимо вычислять отдельно.
В сценарии KSP двойная подпись SHA256 и SHA1 для одного файла обычно приводит к двум вызовам низкоуровневой подписи.
Конкретные правила см. в справочных материалах.
Метка времени
При подписи Windows Authenticode обычно рекомендуется добавлять доверенную метку времени.
В современных сценариях подписи кода рекомендуется в первую очередь использовать метку времени RFC 3161, например:
http://timestamp.acs.microsoft.com
В реальной производственной среде следует выбирать подходящий TSA в зависимости от целевой версии Windows, политик сертификатов, сетевого окружения и требований поставщика службы меток времени.
Подробнее о конкретных серверах меток времени и протоколах см. в справочных материалах.
Примечания по безопасности
При использовании Windows Provider необходимо учитывать следующее:
- Access Secret следует хранить как конфиденциальные учётные данные.
- Не помещайте учётные данные доступа в общедоступные скрипты или журналы.
- Файлы конфигурации Provider не должны распространяться публично.
- Локальные файлы сертификатов не содержат закрытый ключ для подписи кода.
- Закрытый ключ для подписи кода всегда хранится в облачном HSM.
- При инициировании подписи KSP/CSP должен иметь доступ к удалённой службе подписи кода.
- При использовании хранилища сертификатов LocalMachine следует特别注意 права пользователей Windows и область доступа к учётным данным.
config.dat в CSP защищается с помощью DPAPI профиля текущего пользователя Windows. Регистрация сертификата в LocalMachine не изменяет автоматически область защиты DPAPI этой конфигурации.