SignTool

SignTool — это средство командной строки, которое цифрово подписывает файлы, проверяет подписи в файлах и файлы меток времени. Сведения о том, почему файлы подписывания важны, см. в разделе "Общие сведения о подписи кода". Это средство устанавливается в папку \Bin пути установки Windows Пакета средств разработки программного обеспечения (SDK) (например, C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe).

SignTool доступен в составе пакета SDK для Windows, который можно скачать.https://developer.microsoft.com/windows/downloads/windows-10-sdk/

Примечание

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

Синтаксис

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

Параметры

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

Следующие команды поддерживаются SignTool.

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 не используется, SignTool обновляет системный компонент и базу данных драйверов.
/gGUID Указывает, что база данных каталога, определяемая идентификатором GUID, обновляется.
/r Удаляет указанный каталог из базы данных каталога. Если этот параметр не указан, SignTool добавит указанный каталог в базу данных каталога.
/u Указывает, что для добавленных файлов каталога автоматически создается уникальное имя. Пир необходимости, файлы каталогов переименовываются, чтобы предотвратить конфликты имен с существующими файлами каталогов. Если этот параметр не указан, SignTool перезаписывает существующий каталог с тем же именем, что и добавляемый каталог.

Примечание

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

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

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

Параметр команды "sign" Описание
/a Автоматически выбирает лучший сертификат подписи. Программа Sign Tool найдет все действительные сертификаты, которые удовлетворяют всем указанным условиям, и выберет тот, который действителен в течение наиболее длительного периода времени. Если этот параметр не указан, программа Sign Tool находит и использует только один допустимый сертификат подписи.
/acФайл Добавляет дополнительный сертификат из файла file в блок подписи.
/as Добавляет эту подпись. Если основная подпись отсутствует, данная подпись становится основной.
/cCertTemplateName Указывает имя шаблона сертификата (расширение Microsoft) для сертификата подписи.
/cspCSPName Указывается поставщик служб шифрования (CSP), содержащий контейнер закрытого ключа.
/dDesc Задает описание подписанного содержимого.
/dgПуть Создает дайджест для подписи и неподписанных файлов PKCS7. Выходные дайджест-файлы и PKCS7 будут иметь следующий формат: Path\FileName.dig и Path\FileName.p7u. Чтобы вывести дополнительный XML-файл, см. раздел /dxml.
/diПуть Создает подпись путем приема подписанного дайджеста в неподписанный PKCS7-файл. Входные подписанные дайджест и неподписанные файлы PKCS7 должны быть: Path\FileName.dig.signed и Path\FileName.p7u.
/dlibDLL Указывает библиотеку DLL, реализуемую функцией для подписывания дайджеста AuthenticodeDigestSign . Этот параметр эквивалентен использованию SignTool отдельно с переключателями /dg, /ds и /di , за исключением того, что этот параметр вызывает все три как одну атомарную операцию.
/dmdfИмени файла При использовании с параметром /dg передает содержимое AuthenticodeDigestSign файла функции без изменений.
/ds Подписывает только дайджест. Входной файл должен быть дайджестом, созданным параметром /dg . Выходной файл будет иметь следующий формат: File.signed.
/duURL-адрес Задает URL-адрес для расширенного описания подписанного содержимого.
/dxml При использовании с параметром /dg создается XML-файл. Выходной файл будет иметь следующий формат: Path\FileName.dig.xml.
/fSignCertFile Задает сертификат подписи в файле. Если формат файла — Personal Information Exchange (PFX), и он защищен паролем, задайте пароль с помощью параметра /p. Если файл не содержит закрытых ключей, с помощью параметров /csp и /kc задайте CSP и имя контейнера закрытого ключа.
/fdAlg Задает алгоритм хэш-кода файла, который будет использоваться при создании подписей файлов.
Примечание: Если параметр /fd не указан во время подписывания, возникает ошибка.
/fdcertHash Указание строки certHash является действием по умолчанию для алгоритма, используемого в сертификате для подписи.
Примечание: Если параметр /fd не указан во время подписывания, возникает ошибка.
/iIssuerName Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика.
/kcPrivKeyContainerName Задает имя контейнера закрытого ключа.
/nSubjectName Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.
/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" Описание
/a Указывает, что все методы могут использоваться для проверки файла. Сначала выполняется поиск в базах данных каталогов, чтобы определить, подписан ли файл в каталоге. Если файл не вошел в каталог, SignTool пытается проверить внедренную подпись файла. Этот параметр рекомендуется использовать при проверке файлов, которые могут быть подписаны или не подписаны в каталоге. Примеры файлов, которые могут быть подписаны или не могут быть подписаны, включают Windows файлы или драйверы.
/ad Выполняет поиск каталога, используя базу данных каталогов по умолчанию.
/all Проверяет все подписи в файле с несколькими сигнатурами.
/as Выполняет поиск каталога, используя базу данных каталога системных компонентов (драйверов).
/agCatDBGUID Находит каталог в базе данных каталога, определяемой идентификатором GUID.
/cCatFile Задает файл каталога по имени.
/d Печать URL-адреса описания и описания.
Windows Vista и более ранних версий: этот флаг не поддерживается.
/dsIndex Проверяет подпись в определенной позиции.
/hash{SHA1SHA256|} Задает необязательный алгоритм хэширования, который должен использоваться при поиске файла в каталоге.
/kp Выполняет проверку с помощью политики подписывания драйвера в режиме ядра x64.
/ms Использует несколько семантик проверки. Это поведение вызова WinVerifyTrust по умолчанию.
/oVersion Проверяет файл в соответствии с версией операционной системы. Параметр версии имеет форму:
PlatformID**:VerMajor. VerMinor.**BuildNumber
Рекомендуется использовать параметр /o . Если параметр /o не указан, SignTool может возвращать непредвиденные результаты. Например, если параметр /o не включен, системные каталоги, которые правильно проверяются в более старой ОС, могут неправильно проверяться в более новой ОС.
/p7 Проверьте файлы PKCS #7. Существующие политики не используются для проверки PKCS #7. Подпись проверяется, и для сертификата подписи строится цепочка.
/pa Указывает, что используется политика проверки подлинности по умолчанию. Если параметр /pa не указан, SignTool использует политику проверки драйвера Windows. Этот параметр нельзя использовать с параметрами catdb .
/pgPolicyGUID Указывает политику проверки по GUID. Идентификатор GUID соответствует идентификатору ActionID политики проверки. Этот параметр нельзя использовать с параметрами catdb .
/ph Печать и проверка хэш-значений страницы.
Windows Vista и более ранних версий: этот флаг не поддерживается.
/rRootSubjectName Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/tw Указывает, что создается предупреждение, если подпись не имеет метки времени.

Команда signTool проверяет , был ли сертификат подписи выдан доверенным центром, был ли отозван сертификат подписи, а также, при необходимости, является ли сертификат подписи действительным для определенной политики.

Команда signTool verify выводит состояние внедренной сигнатуры, если не указан параметр для поиска каталога (/a, /ad, /as, /ag, /c).

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

Программа 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