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

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

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

Примечание

Пакеты SDK, HLK, WDK и ADK для Windows 10 сборок 20236 и более поздних версий требуют указания алгоритма хэш-кода. Команда SignTool sign требует, чтобы алгоритм дайджеста/fd файла и /td параметр алгоритма дайджеста метки времени были указаны во время подписывания и метки времени соответственно. Если не указать /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 обновляет базу данных системных компонентов и драйверов.
/gGUID Указывает, что база данных каталогов, заданная глобальным уникальным идентификатором GUID, обновлена.
/r Удаляет указанные каталоги из базы данных каталогов. Если этот параметр не указан, программа Sign Tool добавляет указанные каталоги в базу данных каталогов.
/u Указывает, что для добавляемых файлов каталогов автоматически создается уникальное имя. Пир необходимости, файлы каталогов переименовываются, чтобы предотвратить конфликты имен с существующими файлами каталогов. Если этот параметр не указан, программа Sign Tool перезаписывает любой существующий каталог, имеющий то же имя, что и добавляемый каталог.

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

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

Параметр команды "sign" Описание
/a Автоматически выбирает лучший сертификат подписи. Программа Sign Tool найдет все действительные сертификаты, которые удовлетворяют всем указанным условиям, и выберет тот, который действителен в течение наиболее длительного периода времени. Если этот параметр не указан, программа Sign Tool находит и использует только один допустимый сертификат подписи.
/acФайл Добавляет дополнительный сертификат из файла file в блок подписи.
/as Добавляет эту подпись. Если основная подпись отсутствует, данная подпись становится основной.
/cCertTemplateName Указывает имя шаблона сертификата (расширение Microsoft) для сертификата подписи.
/cspCSPName Указывается поставщик служб шифрования (CSP), содержащий контейнер закрытого ключа.
/dDesc Задает описание подписанного содержимого.
/duURL-адрес Задает URL-адрес для расширенного описания подписанного содержимого.
/fSignCertFile Задает сертификат подписи в файле. Если формат файла — Personal Information Exchange (PFX), и он защищен паролем, задайте пароль с помощью параметра /p. Если файл не содержит закрытых ключей, с помощью параметров /csp и /kc задайте CSP и имя контейнера закрытого ключа.
/fd Задает алгоритм хэш-кода файла, который будет использоваться при создании подписей файлов.
Примечание: Если параметр не указан во время подписывания, возникает /fd ошибка.
/fdcertHash Указание строки certHash является действием по умолчанию для алгоритма, используемого в сертификате для подписи.
Примечание: Если параметр не указан во время подписывания, возникает /fd ошибка.
/iIssuerName Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика.
/kcPrivKeyContainerName Задает имя контейнера закрытого ключа.
/nИмя субъекта Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.
/nph Если поддерживается, отключает хэши страниц для исполняемых файлов. Значение по умолчанию определяется переменной среды SIGNTOOL_PAGE_HASHES и версией файла "wintrust.dll". Этот параметр игнорируется для файлов, отличных от PE-файлов.
/pПароль Задает пароль, который используется при открытии PFX-файла. (PFX-файл указывается с помощью параметра /f.)
/p7Путь Указывает, что для каждого заданного файла содержимого создается файл PKCS #7. Файлы PKCS #7 имеют имена вида путь\имя_файла.p7.
/p7ceЗначение Задает параметры для подписанного содержимого PKCS #7. Задайте значение Value как "Embedded", чтобы внедрить подписанное содержимое в файл PKCS #7, или как "DetachedSignedData", чтобы создать подписанную часть данных отсоединенного файла PKCS #7. Если параметр /p7ce не используется, подписанное содержимое встраивается по умолчанию.
/p7co<OID> Задает идентификатор объекта (OID), определяющий подписанное содержимое PKCS #7.
/ph Если поддерживается, генерирует хэши страниц для исполняемых файлов.
/rRootSubjectName Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/sStoreName Указывает хранилище, которое открывается при поиске сертификата. Если этот дополнительный параметр не указан, открывается хранилище My.
/sha1Hash Задает хэш SHA1 сертификата подписи. Хэш SHA1 обычно указывается, когда несколько сертификатов удовлетворяют критериям, заданным остальными ключами.
/sm Указывает, что вместо пользовательского хранилища используется хранилище на компьютере.
/tURL-адрес Задает URL-адрес сервера отметок времени. Если этот параметр (или параметр /tr) отсутствует, подписанному файлу не присваивается отметка времени. Если присвоение отметки времени не удалось, выдается предупреждение. Данный параметр невозможно использовать одновременно с параметром /tr.
/tdAlg Используется с параметром /tr, чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161.
Примечание: Если параметр не указан во время метки времени, возникает /td ошибка.
/trURL-адрес Задает URL-адрес сервера отметок времени RFC 3161. Если этот параметр (или параметр /t) отсутствует, подписанному файлу не присваивается отметка времени. Если присвоение отметки времени не удалось, выдается предупреждение. Данный параметр невозможно использовать одновременно с параметром /t.
/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 отметки времени.
/tURL-адрес Задает URL-адрес сервера отметок времени. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /t или /tr.
/tdAlg Используется с параметром /tr, чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161.
Примечание: Если параметр не указан во время метки времени, возникает /td ошибка.
/tpИндекс Присваивает подписи метку времени в index.
/trURL-адрес Задает URL-адрес сервера отметок времени RFC 3161. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /tr или /t.

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

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

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

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  

См. также