Интеграция signtool ksp с Windows KSP
signtool ksp управляет Windows sslTrus Key Storage Provider (KSP). После установки и настройки KSP Microsoft signtool.exe может вызывать удалённый сервис подписи через CNG Provider без необходимости хранить закрытый ключ локально.
Все подкоманды signtool ksp поддерживаются только на платформе Windows. При выполнении любой подкоманды ksp на платформе, отличной от Windows, будет возвращено:
key storage provider is only supported on windows
Обзор подкоманд
signtool ksp [command]
| Подкоманда | Назначение |
|---|---|
install | Установка и регистрация KSP DLL |
uninstall | Отмена регистрации KSP и удаление DLL |
list | Вывод сохранённых конфигураций ключей KSP |
add | Добавление конфигурации ключа KSP (в интерактивном режиме) |
del | Удаление указанной конфигурации ключа KSP (в интерактивном режиме) |
Параметр --address действует только при ksp add. Он используется для получения PEM сертификата и сохранения адреса удалённого сервиса.
Установка KSP
signtool ksp install
После выполнения:
- Запишите встроенный
sslTrusKSP.dllвProgramData/sslTrusKSP/sslTrusKSP.dll. - Если версия DLL в ProgramData отличается от версии в System32, скопируйте DLL в System32.
- Зарегистрируйте CNG Provider:
sslTrus Key Storage Provider. - Сохраните файл конфигурации KSP
ProgramData/sslTrusKSP/config.dat(шифрование DPAPI).
install изменяет системную регистрацию CNG Provider, рекомендуется выполнять в терминале администратора. Если обнаружена та же версия DLL, будет записано ksp is already installed и произойдёт немедленный возврат.
Удаление KSP
signtool ksp uninstall
После выполнения:
- Отмените регистрацию CNG Provider:
sslTrus Key Storage Provider. - Удалите
ProgramData/sslTrusKSP/sslTrusKSP.dll. - Удалите
sslTrusKSP.dllв System32.
uninstall не удалит весь каталог ProgramData/sslTrusKSP. Сохранённые config.dat, файлы сертификатов и журналы необходимо очистить вручную.
Просмотр конфигурации ключей
signtool ksp list
Описание выходных полей:
| Поле | Значение |
|---|---|
No | Порядковый номер |
CertCode | Номер сертификата |
ServerUrl | Отображается как nicsrs или default |
AccessKey | Access Key |
AccessSecret | Замаскированный Access Secret |
- Если файл конфигурации отсутствует, возвращается
no ksp configuration. - Если конфигурация существует, но список ключей пуст, зафиксируйте
no ksp key. AccessSecretотображается в маскированном виде, но сам файл конфигурации по-прежнему должен управляться как файл, содержащий конфиденциальные данные.
Добавление конфигурации ключа
signtool ksp add
Укажите адрес NICSRS:
signtool ksp add --address nicsrs
Команда является интерактивной, вводите по порядку:
Please enter the access key: your-access-key
Please enter the access secret: your-access-secret
Please enter the certificate code: CERT_CODE
После выполнения:
- Вызовите удалённый
/v1/codesign/cert, чтобы получить PEM сертификата. - Сохраните сертификат как
ProgramData/sslTrusKSP/CERT_CODE.crt. - Запишите конфигурацию ключа в
ProgramData/sslTrusKSP/config.dat(шифрование DPAPI).
Если номер сертификата уже существует, появится сообщение:
The certificate code already exists, do you want to override it? [y/N]
Введите y для перезаписи, при любом другом значении или прямом нажатии Enter операция будет отменена.
ksp add — это интерактивная команда, в настоящее время неинтерактивные параметры, такие как --access-key, --cert-code, не поддерживаются. Добавление конфигурации обращается к удалённому API и записывает PEM сертификата в локальный каталог ProgramData.
Удаление конфигурации ключа
signtool ksp del
Интерактивный ввод номера сертификата:
Please enter the certificate code: CERT_CODE
После выполнения удалите соответствующую конфигурацию ключа из config.dat и повторно сохраните зашифрованный файл конфигурации.
Текущая реализация удаляет только элемент конфигурации, но не удаляет файл сертификата ProgramData/sslTrusKSP/CERT_CODE.crt.
Использование Microsoft signtool.exe через KSP
После завершения настройки KSP используйте Microsoft signtool.exe из Windows SDK для вызова провайдера.
signtool.exe в приведённых ниже командах — это инструмент, входящий в состав Microsoft Windows SDK, а не sslTrus CLI. Если оба инструмента присутствуют в текущем каталоге или PATH, используйте полный путь к signtool.exe из Windows SDK, чтобы избежать путаницы.
Пример подписи SHA256:
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 ^
.\EXAMPLE.exe
Пример добавления подписи SHA1:
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 ^
.\EXAMPLE.exe
Описание параметров:
| Параметр | Значение |
|---|---|
/csp "sslTrus Key Storage Provider" | Указывает KSP Provider, установленный sslTrus |
/kc CERT_CODE | Указывает имя ключа KSP, согласованное как номер сертификата |
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt | Указывает файл сертификата, сохранённый ksp add |
/fd SHA256 или /fd SHA1 | Алгоритм дайджеста файла |
/tr <url> | Служба тайм-штампов RFC3161 |
/td SHA256 | Алгоритм дайджеста тайм-штампа |
/as | Добавить подпись, не перезаписывая существующую |
Справочник по устранению неполадок
| Сообщение об ошибке | Возможная причина | Рекомендация по устранению |
|---|---|---|
key storage provider is only supported on windows | Команда ksp выполнена на платформе, отличной от Windows. | Выполняйте операции KSP только в Windows. |
no ksp configuration | Файл конфигурации KSP ещё не создан. | Сначала выполните signtool ksp install и signtool ksp add. |
no such certificate code | Номер удаляемого сертификата не существует. | Подтвердите номер сертификата с помощью signtool ksp list. |
Меры предосторожности
signtool ksp installиsigntool ksp uninstallизменяют системные каталоги Windows и реестр CNG Provider, обычно требуются права администратора.signtool ksp addобращается к удалённому интерфейсу сертификатов и записывает файлы сертификатов и зашифрованную конфигурацию вProgramData/sslTrusKSP.- Access Secret, файлы конфигурации KSP и локальные журналы следует обрабатывать как конфиденциальную информацию, не записывать их в журналы или репозитории версий.