Перейти к основному содержимому

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Сценарий использования
KSPCNG (Cryptography API: Next Generation)Современные приложения Windows и инструменты подписи; предпочтительный выбор
CSPCryptoAPIУстаревшие приложения или программное обеспечение, явно требующее использования 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-userCurrentUser\My
local-machineLocalMachine\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​

Если нет особых требований к совместимости, можно выбирать следующим образом:

СценарийРекомендация
Новая среда подписи WindowsKSP
Поддержка Windows CNGKSP
Современные инструменты Windows, такие как Microsoft SignToolKSP
Программное обеспечение явно требует CSPCSP
Традиционные приложения CryptoAPICSP
Инструменты требуют использования /csp и /kcCSP

Основное различие между 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 этой конфигурации.