SignTool.exe (программа подписывания)

Sign Tool — это программа командной строки, которая присваивает цифровые подписи файлам, проверяет подписи файлов и создает отметки времени для файлов.

Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.

Примечание

Пакеты SDK, HLK, WDK и ADK для Windows 10 сборок 20236 и более поздних версий требуют указания алгоритма хэш-кода. Для команды SignTool sign требуется /fd , чтобы sign и /td/fd были указаны при подписывании и отметке времени соответственно. Если не указать /fd во время подписывания или /td при отметке времени, возникнет ошибка (код ошибки 1).

В командной строке введите следующее.

Синтаксис

signtool [command] [options] [file_name | ...]  

Параметры

Аргумент Описание
command Одна из четырех команд (catdb, sign, Timestamp или Verify), указывающая операцию, которую требуется выполнить с файлом. Описание каждой из команд дано в следующей таблице.
options Параметр, изменяющий команду. Кроме глобальных параметров /q и /v каждая команда поддерживает уникальный набор параметров.
file_name Путь к подписываемому файлу.

Программа Sign Tool поддерживает следующие команды. Каждая команда используется с отдельными наборами параметров, которые перечислены в соответствующих подразделах.

Get-Help Описание
catdb Добавляет файл каталога в базу данных каталогов или удаляет его из этой базы данных. Базы данных каталогов используются для автоматического поиска файлов каталогов и определяются идентификаторами GUID. Список параметров, поддерживаемых catdb командой, см. в разделе catdb.
sign Присваивает цифровые подписи файлам. Цифровые подписи обеспечивают защиту файлов от несанкционированного доступа и позволяют пользователям проверять, кем подписан файл, на основе сертификата подписи. Список параметров, поддерживаемых sign командой, см. в разделе sign.
Timestamp Присваивает отметки времени для файлов. Список параметров, поддерживаемых TimeStamp командой, см. в разделе TimeStamp.
Verify Проверяет цифровую подпись файлов, определяя, был ли сертификат подписи выдан доверенным центром сертификации, был ли сертификат подписи отозван, и, если требуется, действителен ли сертификат подписи для конкретной политики. Список параметров, поддерживаемых Verify командой, см. в разделе Verify.

Следующие параметры доступны для всех команд программы Sign Tool.

Глобальный параметр Описание
/q Не отображает выходные данные, если команда выполнена успешно, и отображает минимальные выходные данные, если команда завершилась ошибкой.
/v Отображает подробные выходные данные независимо от того, выполнена ли команда успешно или с ошибкой, и отображает предупреждения.
/debug Отображает отладочную информацию.

Параметры команды "catdb"

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

Параметр "catdb" Описание
/d Указывает, что используемая по умолчанию база данных каталогов обновлена. Если не указан ни параметр /d, ни /g, программа Sign Tool обновляет базу данных системных компонентов и драйверов.
/g/g Указывает, что база данных каталогов, заданная глобальным уникальным идентификатором GUID, обновлена.
/r Удаляет указанные каталоги из базы данных каталогов. Если этот параметр не указан, программа Sign Tool добавляет указанные каталоги в базу данных каталогов.
/u Указывает, что для добавляемых файлов каталогов автоматически создается уникальное имя. Пир необходимости, файлы каталогов переименовываются, чтобы предотвратить конфликты имен с существующими файлами каталогов. Если этот параметр не указан, программа Sign Tool перезаписывает любой существующий каталог, имеющий то же имя, что и добавляемый каталог.

Параметры команды "sign"

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

Параметр команды "sign" Описание
/a Автоматически выбирает лучший сертификат подписи. Программа Sign Tool найдет все действительные сертификаты, которые удовлетворяют всем указанным условиям, и выберет тот, который действителен в течение наиболее длительного периода времени. Если этот параметр не указан, программа Sign Tool находит и использует только один допустимый сертификат подписи.
/ac/ac Добавляет дополнительный сертификат из файла file в блок подписи.
/as Добавляет эту подпись. Если основная подпись отсутствует, данная подпись становится основной.
/c/c Указывает имя шаблона сертификата (расширение Microsoft) для сертификата подписи.
/csp/csp Указывается поставщик служб шифрования (CSP), содержащий контейнер закрытого ключа.
/d/d Задает описание подписанного содержимого.
/du/du Задает URL-адрес для расширенного описания подписанного содержимого.
/f/f Задает сертификат подписи в файле. Если формат файла — Personal Information Exchange (PFX), и он защищен паролем, задайте пароль с помощью параметра /p. Если файл не содержит закрытых ключей, с помощью параметров /csp и /kc задайте CSP и имя контейнера закрытого ключа.
/fd Задает алгоритм хэш-кода файла, который будет использоваться при создании подписей файлов.

Если во время подписывания не указан параметр, /fd возникает ошибка.
/fd/fd Указание строки certHash является действием по умолчанию для алгоритма, используемого в сертификате для подписи.

Если во время подписывания не указан параметр, /fd возникает ошибка.
/i/i Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика.
/kc/kc Задает имя контейнера закрытого ключа.
/n/n Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.
/nph Если поддерживается, отключает хэши страниц для исполняемых файлов. Значение по умолчанию определяется переменной среды SIGNTOOL_PAGE_HASHES и версией файла "wintrust.dll". Этот параметр игнорируется для файлов, отличных от PE-файлов.
/p/p Задает пароль, который используется при открытии PFX-файла. (PFX-файл указывается с помощью параметра /f.)
/p7/p7 Указывает, что для каждого заданного файла содержимого создается файл PKCS #7. Файлы PKCS #7 имеют имяfilename. P7.
/p7ce/p7ce Задает параметры для подписанного содержимого PKCS #7. Задайте значение Value как "Embedded", чтобы внедрить подписанное содержимое в файл PKCS #7, или как "DetachedSignedData", чтобы создать подписанную часть данных отсоединенного файла PKCS #7. Если параметр /p7ce не используется, подписанное содержимое встраивается по умолчанию.
/p7co/p7co Задает идентификатор объекта (OID), определяющий подписанное содержимое PKCS #7.
/ph Если поддерживается, генерирует хэши страниц для исполняемых файлов.
/r/r Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/s/s Указывает хранилище, которое открывается при поиске сертификата. Если этот дополнительный параметр не указан, открывается хранилище My.
/sha1/sha1 Задает хэш SHA1 сертификата подписи. Хэш SHA1 обычно указывается, когда несколько сертификатов удовлетворяют критериям, заданным остальными ключами.
/sm Указывает, что вместо пользовательского хранилища используется хранилище на компьютере.
/t/t Задает URL-адрес сервера отметок времени. Если этот параметр (или параметр /tr) отсутствует, подписанному файлу не присваивается отметка времени. Если присвоение отметки времени не удалось, выдается предупреждение. Данный параметр невозможно использовать одновременно с параметром /tr.
/td/td Используется с параметром /tr, чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161.

Если /td при выполнении метки времени не указано, возникает ошибка.
/tr/tr Задает URL-адрес сервера отметок времени RFC 3161. Если этот параметр (или параметр /t) отсутствует, подписанному файлу не присваивается отметка времени. Если присвоение отметки времени не удалось, выдается предупреждение. Данный параметр невозможно использовать одновременно с параметром /t.
/u/u Задает расширенное использование ключа (EKU), которое должно быть представлено в сертификате подписи. Значение использования может быть задано идентификатором объекта или строкой. По умолчанию используется подписывание кода (1.3.6.1.5.5.7.3.3).
/uw Задает использование "Windows System Component Verification" (1.3.6.1.4.1.311.10.3.6).

Примеры использования см. в разделе Использование средства SignTool для подписания файла.

Параметры команды "TimeStamp"

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

Параметр "TimeStamp" Описание
/p7 Присваивает файлам PKCS #7 отметки времени.
/t/t Задает URL-адрес сервера отметок времени. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /t или /tr.
/td/td Используется с параметром /tr, чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161.

Если /td при выполнении метки времени не указано, возникает ошибка.
/tp/tp Присваивает подписи метку времени в index.
/tr/tr Задает URL-адрес сервера отметок времени RFC 3161. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /tr или /t.

Пример использования см. в разделе Добавление меток времени в ранее подписанные файлы.

Параметры команды "Verify"

Параметр "Verify" Описание
/a Указывает, что все методы могут использоваться для проверки файла. Сначала выполняется поиск в базах данных каталогов, чтобы определить, подписан ли файл в каталоге. Если файл не подписан ни в одном каталоге, программа Sign Tool пытается проверить встроенную подпись файла. Этот параметр рекомендуется использовать при проверке файлов, которые могут быть подписаны или не подписаны в каталоге. К примерам таких фалов относятся файлы или драйверы Windows.
/ad Выполняет поиск каталога, используя базу данных каталогов по умолчанию.
/ag/ag Выполняет поиск каталога в указанной параметром CatDBGUID базе данных каталогов.
/all Проверяет все подписи в файле, содержащем несколько подписей.
/as Выполняет поиск каталога, используя базу данных каталога системных компонентов (драйверов).
/c/c Задает файл каталога по имени.
/d Указывает, что программе Sign Tool следует печатать описание и URL-адрес описания.
/ds/ds Проверяет подпись в указанной позиции.
/hash (SHA1|SHA256) Задает необязательный алгоритм хэширования, который должен использоваться при поиске файла в каталоге.
/kp Указывает, что проверка должна выполняться с использованием политики подписывания работающего в режиме ядра драйвера.
/ms Использует несколько семантик проверки. Это поведение по умолчанию вызова WinVerifyTrust в Windows 8 и более поздних версиях.
/o/o Проверяет файл в соответствии с версией операционной системы. Версия имеет следующую форму: PlatformID:VerMajor.VerMinor.BuildNumber. PlatformID представляет базовое значение элемента перечисления. Важно. Рекомендуется использовать параметр. Если значение /o не указано, программа SignTool.exe может возвращать непредвиденные результаты. Например, если не указан параметр /o, системные каталоги, которые успешно проходят проверку в случае более старой версии операционной системы, могут не пройти проверку в ее новой версии.
/p7 Проверяет файлы PKCS #7. Существующие политики не используются для проверки PKCS #7. Подпись проверяется, и для сертификата подписи строится цепочка.
/pa Задает обязательное использование политики проверки Authenticode по умолчанию. Если параметр /pa не указан, программа Sign Tool использует политику проверки драйверов Windows. Данный параметр невозможно использовать одновременно с параметрами catdb.
/pg/pg Задает политику проверки по идентификатору GUID. Идентификатор PolicyGUID соответствует идентификатору ActionID политики проверки. Данный параметр невозможно использовать одновременно с параметрами catdb.
/ph Указывает, что программа Sign Tool должна печатать и проверять хэш-значения страниц.
/r/r Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/tw Указывает необходимость выдачи предупреждения, если подпись не имеет отметки времени.

Примеры использования см. в разделе Использование средства SignTool для проверки подписи файла.

Возвращаемое значение

Программа Sign Tool при прерывании возвращает один из следующих кодов выхода.

Код выхода Описание
0 Выполнение прошло успешно.
1 Сбой выполнения.
2 Выполнение завершено с предупреждениями.

Примеры

Следующая команда добавляет файл каталога "MyCatalogFileName.cat" в базу данных системных компонентов и драйверов. Параметр /u создает уникальное имя, если это необходимо для предотвращения замены существующего файла каталога с именем MyCatalogFileName.cat.

signtool catdb /v /u MyCatalogFileName.cat  

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

signtool sign /a /fd SHA256 MyFile.exe

При выполнении следующей команды файл подписывается цифровой подписью с помощью сертификата, хранящегося в защищенном паролем PFX-файле.

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe

При выполнении следующей команды файл подписывается цифровой подписью, и ему присваивается отметка времени. Сертификат, используемый для подписания файла, хранится в PFX-файле.

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe

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

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe

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

Signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe

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

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

Следующая команда помечает файл с помощью сервера меток времени RFC 3161.

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

Следующая команда проверяет наличие подписи у файла.

signtool verify MyFile.exe  

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

signtool verify /a SystemFile.dll  

Следующая команда проверяет системный файл, подписанный в каталоге с именем MyCatalog.cat.

signtool verify /c MyCatalog.cat SystemFile.dll  

См. также