Интеграция 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, а не CLI sslTrus. Если оба инструмента присутствуют в текущем каталоге или в 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 и локальные журналы следует обрабатывать как конфиденциальную информацию, не записывать их в журналы или репозитории версий.