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

Клиентские инструменты

sslTrus предоставляет клиент командной строки и настольный клиент для подключения к удалённому сервису подписи кода и выполнения подписи файлов.

При этом SignTool CLI подходит для сценариев командной строки, скриптов и автоматизации; пользователи macOS также могут устанавливать и обновлять SignTool CLI или настольный клиент через Homebrew.

SignTool CLI

SignTool CLI — это клиент командной строки для удалённой подписи кода, предоставляемый sslTrus. После установки имя исполняемого файла — signtool.

Он предоставляет следующие основные возможности:

ФункцияКомандаОписание
Подпись файлаsigntool signВыполняет удалённую подпись локального файла
Квота подписиsigntool quotaЗапрашивает оставшуюся и общую квоту подписи сертификата
Обновление клиентаsigntool updateЗапрашивает и устанавливает последнюю версию клиента для текущей платформы
Windows KSPsigntool kspУстанавливает и управляет Windows Key Storage Provider
Windows CSPsigntool cspУстанавливает и управляет Windows Cryptographic Service Provider

KSP и CSP относятся к способам интеграции Windows Provider. Подробнее о порядке использования см. в разделе Windows Provider.

Загрузка клиента

SignTool CLI можно загрузить со страницы выпусков клиента sslTrus:

Страница выпусков клиента sslTrus

Страница выпусков предоставляет最新 установочные пакеты клиента для каждой платформы. В сценариях автоматизации также можно запрашивать информацию о последней версии через индекс версий latest.json.

Пользователи macOS также могут установить клиент напрямую через Homebrew, см. ниже macOS Homebrew.

Просмотр информации о клиенте

После завершения установки можно выполнить:

signtool --help

Просмотр справки по команде.

Просмотр текущей версии клиента:

signtool --version

Информация о версии содержит сведения о версии клиента, ревизии сборки, платформе выполнения и времени сборки.

Учётные данные доступа

Перед использованием службы удалённого подписания кода необходимо подготовить:

  • Access Key
  • Access Secret
  • Номер сертификата (Cert Code)

Access Key и Access Secret используются для доступа к службе удалённого подписания кода, а номер сертификата — для указания сертификата подписания кода, которым фактически выполняется подпись.

SignTool CLI может получать учётные данные через параметры команды или считывать их из переменных окружения:

export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"

Рекомендуется предоставлять Access Secret через переменные окружения, секреты CI/CD или другие безопасные способы управления учетными данными.

Не следует:

  • Добавлять Access Secret в репозиторий Git.
  • Вписывать его в общедоступные скрипты.
  • Выводить его в логи сборки.
  • Отправлять его в недоверенные сторонние системы.

Адрес удаленного сервиса

По умолчанию SignTool CLI использует производственный адрес сервиса sslTrus, дополнительная настройка не требуется.

Если используется среда NICSRS (www.nicsrs.com), необходимо добавить в команду --address nicsrs:

signtool sign \
--address nicsrs \
--cert-code CERT_CODE \
--file app.exe

signtool quota и signtool update также поддерживают --address nicsrs.

Подпись файла

С помощью signtool sign можно выполнять удалённую подпись кода непосредственно для локальных файлов.

Основная команда подписи:

signtool sign \
--cert-code CERT_CODE \
--file app.exe

Если уже настроено:

ACCESS_KEY
ACCESS_SECRET

CLI SignTool 会自动读取相应的访问凭证。

默认使用 SHA-2 进行签名。

指定输出文件

默认情况下,客户端不会直接覆盖原文件。

可以通过 --out 指定签名后的输出文件:

signtool sign \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

Перезапись исходного файла

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

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--override=true

После включения --override результат подписи будет записан непосредственно обратно во входной файл.

При использовании в среде автоматизированной сборки следует убедиться, требуется ли на последующих этапах исходный файл или уже подписанный файл.

Указание описания программы

Описание программы и URL можно включить в подпись Authenticode:

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--desc "Example Application" \
--url "https://example.com"

SHA-1 и SHA-2

SHA-2 включён по умолчанию:

signtool sign \
--cert-code CERT_CODE \
--file app.exe

Использовать только SHA-1:

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--sha1=true \
--sha2=false

Одновременно включите SHA-1 и SHA-2:

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--sha1=true \
--sha2=true

SHA-1 в основном используется для совместимости со старыми системами, в новых проектах обычно следует отдавать приоритет SHA-2.

Метка времени

При подписании кода обычно рекомендуется одновременно добавлять доверенную метку времени.

SignTool CLI по умолчанию автоматически настраивает службу меток времени для подписи, также можно указать сервер меток времени через параметры:

  • --timestamp-rfc3161: RFC 3161 сервер меток времени, используемый для подписи SHA-2.
  • --timestamp: Authenticode сервер меток времени, используемый для подписи SHA-1.

Указание RFC 3161 сервера меток времени:

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--timestamp-rfc3161=http://timestamp.acs.microsoft.com

Укажите сервер меток времени Authenticode:

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--timestamp=http://timestamp.sectigo.com

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

signtool sign \
--cert-code CERT_CODE \
--file app.exe \
--timestamp-rfc3161= \
--timestamp=

Сведения о протоколе штампов времени, адресах серверов и рекомендациях по выбору см. в справочных материалах.

Запрос квоты на подпись

Использование:

signtool quota

Можно запросить квоту сертификатов подписи кода, доступную текущему токену доступа.

Выходные данные включают:

  • Номер сертификата.
  • Информация о сертификате.
  • Оставшееся количество подписей.
  • Общее количество подписей.

Если требуется вывод в формате JSON:

signtool quota --json

Также можно использовать сокращённую запись:

signtool quota -j

Конкретный способ подсчета количества подписей может различаться в зависимости от способа вызова CLI, KSP, Jarsigner или инструмента сборки. Подробные правила см. в Описание расчета количества подписей.

Обновление клиента

SignTool CLI поддерживает проверку и установку последней версии для текущей платформы:

signtool update

В процессе обновления проверяются размер загруженного файла и SHA-256, чтобы подтвердить целостность файлов клиента.

Если SignTool CLI был установлен через Homebrew, рекомендуется и дальше управлять версиями через Homebrew, а не смешивать два способа обновления.

macOS Homebrew

Пользователи macOS могут установить SignTool CLI или настольный клиент через официальный Homebrew Tap от sslTrus.

Установка Homebrew Tap

Выполните:

brew tap ssltrus-official/tap
brew trust ssltrus-official/tap

После завершения можно установить соответствующий клиент.

Установка SignTool CLI

Выполните:

brew install ssltrus-official/tap/code-sign-cli

После завершения установки можно выполнить:

signtool --version

Проверьте, корректно ли установлен клиент.

Название пакета в Homebrew:

code-sign-cli

Фактическое имя программы командной строки для установки:

signtool

Установка настольного клиента

Установите настольный клиент для подписи кода sslTrus:

brew install --cask ssltrus-official/tap/code-sign-gui

Соответствующее имя Homebrew Cask:

code-sign-gui

Обновление клиента

Если клиент установлен через Homebrew, рекомендуется выполнять обновление с помощью Homebrew.

Сначала обновите информацию о пакетах Homebrew:

brew update

Обновите SignTool CLI:

brew upgrade ssltrus-official/tap/code-sign-cli

Обновите настольный клиент:

brew upgrade --cask ssltrus-official/tap/code-sign-gui

Это позволяет локальной установке соответствовать метаданным пакета Homebrew.

Windows Provider

Если ваш сценарий не предполагает прямого вызова SignTool CLI, а требует, чтобы Microsoft SignTool, Visual Studio, MSBuild, Advanced Installer или другое программное обеспечение Windows напрямую использовало закрытый ключ удалённого подписания кода, следует использовать Windows Provider.

sslTrus предоставляет:

  • KSP (Key Storage Provider):для Windows CNG.
  • CSP (Cryptographic Service Provider):для традиционного Windows CryptoAPI.

См. Windows Provider.

Автоматическое подписание в CI/CD

Если необходимо выполнять подписание в процессе непрерывной интеграции или автоматической сборки, не всегда требуется вручную устанавливать и вызывать SignTool CLI.

Например, GitHub Actions может напрямую использовать sslTrus Code Sign Action:

- name: Sign files
uses: ssltrus-official/code-sign-action@v1
with:
access-key: ${{ secrets.SSLTRUS_ACCESS_KEY }}
access-secret: ${{ secrets.SSLTRUS_ACCESS_SECRET }}
cert-code: ${{ secrets.SSLTRUS_CERT_CODE }}
files: build/app.exe

GitHub Action поддерживает раннеры Linux, macOS и Windows и позволяет выполнять удалённое подписание указанных файлов непосредственно в процессе сборки.

Полную конфигурацию см. в разделе CI/CD и средства сборки.

Как выбрать

Вы можете выбрать подходящий клиент или способ интеграции в зависимости от фактического способа использования:

СценарийРекомендуемый способ
Ручное подписание файлов в терминалеSignTool CLI
Массовый вызов подписания с помощью скриптовSignTool CLI
Проверка квоты подписания кодаSignTool CLI
Установка и обновление CLI в macOSHomebrew
Использование настольного клиента в macOSHomebrew
Прямой вызов удалённого закрытого ключа программами Windows, такими как Microsoft SignToolKSP
Программы с традиционным CryptoAPICSP
Автоматическое подписание в GitHub ActionsGitHub Actions
Самостоятельная разработка клиента подписанияAPI удалённого подписания кода

Если ваше приложение уже поддерживает Windows KSP, CSP или других стандартных провайдеров, обычно следует в первую очередь использовать соответствующий стандартный способ интеграции; если же требуется напрямую управлять процессом подписания, можно использовать SignTool CLI или API удалённого подписания кода.