SignTool.exe
SignTool.exe — это консольная утилита командной строки, входящая в состав Windows SDK (Software Development Kit) и предназначенная для цифровой подписи файлов, проверки подписей в файлах, а также для управления метками времени (timestamping) подписей. Утилита используется разработчиками и системными администраторами для обеспечения целостности и подлинности исполняемых файлов, библиотек, драйверов, установочных пакетов и других типов данных, распространяемых в цифровом виде.
История и развитие
SignTool.exe была впервые представлена компанией Microsoft в составе Windows SDK для Windows Vista и Windows Server 2008. До её появления основным инструментом для подписи кода в Windows была утилита SignCode.exe, которая входила в состав пакета Authenticode. SignCode.exe обладала ограниченной функциональностью и не поддерживала современные на тот момент криптографические стандарты. С выходом Windows SDK для Windows Vista компания Microsoft заменила SignCode.exe на SignTool.exe, которая стала более гибким и мощным инструментом.
В последующих версиях Windows SDK (для Windows 7, 8, 10, 11) SignTool.exe постоянно обновлялась: добавлялась поддержка новых алгоритмов хеширования (SHA-256, SHA-384, SHA-512), расширенных возможностей работы с сертификатами, поддержка подписи драйверов для Windows Hardware Quality Labs (WHQL), а также возможность подписи файлов в режиме совместимости с подписью кода для Windows 10 S и Windows 11 в режиме S.
Основные функции
SignTool.exe выполняет несколько ключевых операций, связанных с цифровыми подписями:
Подпись файлов
Основная функция — наложение цифровой подписи на файл. Подпись может быть выполнена с использованием сертификата, установленного в хранилище сертификатов Windows, или из файла (например, в формате PFX или P12). Утилита поддерживает следующие типы подписей:
- Подпись кода (Authenticode) — стандартная подпись для исполняемых файлов (.exe, .dll, .ocx, .cab, .msi, .xpi и др.).
- Подпись драйверов — специальная подпись для драйверов Windows, которая может быть проверена на соответствие требованиям WHQL.
- Подпись файлов каталога (.cat) — подпись файлов каталога, используемых для драйверов и компонентов Windows.
- Подпись с меткой времени — добавление метки времени от доверенного центра сертификации (Timestamp Authority, TSA), что позволяет подписи оставаться действительной даже после истечения срока действия сертификата.
Проверка подписи
SignTool.exe позволяет проверить цифровую подпись файла на предмет её целостности, подлинности и соответствия требованиям. Проверка включает:
- Верификацию цепочки сертификатов (до корневого центра сертификации).
- Проверку срока действия сертификата.
- Проверку соответствия подписи политикам Windows (например, требованиям к подписи драйверов для 64-разрядных версий Windows).
- Извлечение информации о подписи: имя издателя, серийный номер сертификата, алгоритм хеширования, дата подписи и метки времени.
Управление метками времени
Утилита может добавлять метку времени к уже существующей подписи, а также извлекать или удалять метки времени. Это особенно важно для долгосрочного хранения подписанных файлов, так как метка времени подтверждает, что подпись была создана до момента истечения сертификата.
Удаление подписи
SignTool.exe поддерживает удаление цифровой подписи из файла. Это может быть необходимо для повторной подписи файла другим сертификатом или для устранения ошибок, связанных с повреждённой подписью.
Классификация и типы подписей
SignTool.exe поддерживает несколько типов цифровых подписей, которые различаются по назначению и требованиям:
- Подпись кода (Authenticode) — наиболее распространённый тип, используется для любых исполняемых файлов и библиотек. Подпись включает хеш файла, сертификат издателя и опциональную метку времени.
- Подпись драйвера (Driver Signing) — специальный тип подписи, который требуется для установки драйверов в 64-разрядных версиях Windows, начиная с Windows Vista. Подпись может быть выполнена от имени Microsoft (WHQL-подпись) или от имени стороннего разработчика (с использованием кросс-сертификата).
- Подпись файла каталога (.cat) — подпись, которая накладывается на файл каталога, содержащий хеши нескольких файлов. Это позволяет подписывать сразу множество файлов одной подписью.
- Подпись с использованием аппаратного модуля безопасности (HSM) — SignTool.exe поддерживает работу с аппаратными токенами и смарт-картами через интерфейс CSP (Cryptographic Service Provider) или CNG (Cryptography API: Next Generation).
Синтаксис и основные параметры
SignTool.exe вызывается из командной строки с указанием команды и параметров. Общий синтаксис:
`` signtool [команда] [параметры] [файл(ы)] ``
Основные команды:
- sign — подписать файл.
- verify — проверить подпись.
- timestamp — добавить или изменить метку времени.
- remove — удалить подпись.
- catdb — управление базой данных каталогов.
Примеры использования:
- Подписать файл с использованием сертификата из хранилища:
`` signtool sign /fd SHA256 /a /t http://timestamp.digicert.com myapp.exe ` Параметр /fd задаёт алгоритм хеширования (SHA-256), /a — автоматический выбор сертификата, /t` — URL центра меток времени.
- Проверить подпись файла:
`` signtool verify /pa /v myapp.exe ` Параметр /pa — проверка по политике Authenticode, /v` — подробный вывод.
- Удалить подпись:
`` signtool remove /s myapp.exe ``
Применение
SignTool.exe широко используется в следующих сценариях:
- Разработка программного обеспечения — подпись исполняемых файлов и установщиков перед публикацией. Это позволяет пользователям и операционной системе проверять, что файл не был изменён после подписания и что он исходит от указанного издателя.
- Разработка драйверов — подпись драйверов для прохождения проверки WHQL и для установки на 64-разрядные системы Windows. Начиная с Windows 10, все драйверы, устанавливаемые через Windows Update, должны быть подписаны с использованием расширенной проверки (EV) или через программу Hardware Dev Center.
- Автоматизация сборки — SignTool.exe часто включается в скрипты сборки (например, в MSBuild, Jenkins, Azure DevOps) для автоматической подписи всех компонентов продукта.
- Администрирование — системные администраторы используют утилиту для проверки подписей системных файлов, драйверов и стороннего ПО на предмет целостности и подлинности.
Ограничения и критика
Несмотря на широкое распространение, SignTool.exe имеет ряд ограничений:
- Зависимость от Windows SDK — утилита не входит в состав стандартной установки Windows, что требует установки SDK (объёмом несколько гигабайт) или отдельного пакета Windows SDK для разработки приложений.
- Сложность настройки — для корректной работы с сертификатами и центрами меток времени требуется предварительная настройка хранилищ сертификатов и доступ к сети (для меток времени).
- Отсутствие графического интерфейса — SignTool.exe является исключительно консольной утилитой, что может быть неудобно для пользователей, не знакомых с командной строкой. Для них Microsoft предлагает утилиту SignTool GUI (входит в состав Windows SDK), но её функциональность ограничена.
- Проблемы с метками времени — при использовании меток времени от сторонних центров сертификации возможны проблемы с доступностью сервера или с истечением срока действия сертификата центра меток времени, что может привести к недействительности подписи.
Альтернативы
Существуют сторонние утилиты и библиотеки, которые выполняют аналогичные функции:
- OpenSSL — кроссплатформенная библиотека, позволяющая подписывать файлы с использованием алгоритмов RSA, DSA, ECDSA, но не поддерживающая формат Authenticode напрямую.
- osslsigncode — утилита с открытым исходным кодом, которая эмулирует функциональность SignTool.exe на платформах Linux и macOS. Она позволяет подписывать и проверять файлы в формате Authenticode, используя OpenSSL.
- Azure SignTool — облачный сервис Microsoft, который позволяет подписывать файлы без локального хранения сертификатов, используя Azure Key Vault.
Интересные факты
- SignTool.exe может подписывать не только файлы, но и целые каталоги (создавая файл каталога .cat), что удобно для подписи драйверов, состоящих из множества файлов.
- Утилита поддерживает подпись файлов в формате MSI (установщики Windows) и APPX (пакеты приложений для Windows Store).
- Для подписи драйверов, предназначенных для Windows 10 и Windows 11, требуется сертификат, выпущенный центром сертификации, аккредитованным Microsoft в рамках программы Windows Hardware Compatibility Program (WHCP).
Источники
- Microsoft Docs: SignTool.exe (Windows SDK)
- Microsoft Docs: Authenticode Code Signing
- Windows SDK Documentation: SignTool Command-Line Tool
- MSDN Magazine: "Signing Code with SignTool.exe"
- Open Source osslsigncode documentation
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →