SignTool

SignTool — это средство командной строки, которое цифрово подписывает файлы, проверяет подписи в файлах и файлы меток времени. Сведения о том, почему файлы подписывания важны, см. в разделе "Общие сведения о подписи кода".

SignTool доступен в составе пакета SDK для Windows. Средство устанавливается в \Bin папку пути установки пакета SDK для Windows, например: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe

Примечание.

Пакет SDK для Windows, комплект оборудования Windows (HLK), комплект драйверов Windows (WDK) и комплект средств для оценки и развертывания Windows (ADK) сборки 20236 и более поздних версий требуют указания алгоритма дайджеста. Для команды SignTool sign требуется параметр алгоритма дайджеста файлов (/fd) и алгоритм дайджеста меток времени () во/td время подписывания и метки времени соответственно.

Если /fd не указано во время подписи и если /td не указано во время метки времени, команда создает предупреждение, код ошибки 0 изначально. В более поздних версиях SignTool предупреждение становится ошибкой. Рекомендуется SHA256. Считается более безопасным, чем SHA1 в отрасли.

Синтаксис

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

Параметры

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

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

Команда Description
catdb Добавляет файл каталога в базу данных каталогов или удаляет его из этой базы данных. Базы данных каталогов используются для автоматического поиска файлов каталогов и определяются идентификаторами GUID. Список параметров, поддерживаемых командой catdb , см. в разделе "Параметры команды catdb".
sign Присваивает цифровые подписи файлам. Цифровые подписи защищают файлы от изменения и позволяют пользователям проверять подписыватель на основе сертификата подписи. Список параметров, поддерживаемых командой sign , см. в разделе "Параметры команды подписи".
timestamp Файлы меток времени. Список параметров, поддерживаемых командой timestamp , см. в разделе "Параметры метки времени".
verify Проверяет цифровую подпись файлов. Определяет, был ли сертификат подписи выдан доверенным центром, был ли отозван сертификат подписи и, при необходимости, является ли сертификат подписи действительным для определенной политики. Список параметров, поддерживаемых командой verify , см. в разделе "Проверка параметров команды".

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

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

Параметры команды Catdb

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

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

Примечание.

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

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

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

Параметр команды "sign" Description
/a Автоматически выбирает лучший сертификат подписи. SignTool находит все допустимые сертификаты, удовлетворяющие всем указанным условиям, и выбирает допустимый в течение длительного времени. Если этот параметр отсутствует, SignTool ожидает найти только один действительный сертификат подписи.
/ac file Добавляет другой сертификат из файла в блок подписи.
/as Добавляет эту подпись. Если первичная подпись не существует, эта подпись создается вместо первичной подписи.
/c CertTemplateName Указывает имя шаблона сертификата (расширение Microsoft) для сертификата подписи.
/csp CSPName Указывается поставщик служб шифрования (CSP), содержащий контейнер закрытого ключа.
/d Desc Задает описание подписанного содержимого.
/dg Путь Создает дайджест для подписи и неподписанных PKCS7-файлов. Выходные дайджест и PKCS7-файлы : Path\<FileName.dig> и <Path>>\<FileName.p7u>.< Чтобы вывести дополнительный XML-файл, используйте /dxml.
/di Путь Создает подпись путем приема подписанного дайджеста в неподписанный PKCS7-файл. Входной дайджест и неподписанные файлы PKCS7 должны быть Path\<FileName.dig.signed> и <Path>>\<FileName.p7u>.<
/dlibБИБЛИОТЕКА DLL Указывает библиотеку DLL, реализующую AuthenticodeDigestSign функцию для подписывания дайджеста. Этот параметр эквивалентен использованию SignTool отдельно с параметрами и /di параметрами./dg/ds Этот параметр вызывает все три как одну атомарную операцию.
/dmdfИмя файла При использовании с /dg параметром передает содержимое файла функции AuthenticodeDigestSign без изменений.
/ds Подписывает только дайджест. Входной файл должен быть дайджестом, созданным параметром /dg . Выходной файл: File.signed>.<
/du URL Задает URL-адрес для расширенного описания подписанного содержимого.
/dxml При использовании с /dg параметром создается XML-файл. Выходной файл: Path\FileName>.dig.xml.<><
/f SignCertFile Задает сертификат подписи в файле. Если формат файла — Personal Information Exchange (PFX), и он защищен паролем, задайте пароль с помощью параметра /p. Если файл не содержит закрытых ключей, используйте /csp /kc параметры, чтобы указать имя контейнера CSP и закрытого ключа.
/fd alg Задает алгоритм хэш-кода файла, который будет использоваться при создании подписей файлов. Примечание. Если параметр /fd не указан во время подписи, команда создает ошибку.
/fd certHash При указании строки "certHash" команда использует алгоритм, указанный в сертификате подписи. Примечание. Если параметр /fd не указан во время подписи, команда создает ошибку.
/i IssuerName Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика.
/kc PrivKeyContainerName Задает имя контейнера закрытого ключа.
/n SubjectName Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.
/nph Если поддерживается, отключает хэши страниц для исполняемых файлов. Значение по умолчанию определяется переменной среды SIGNTOOL_PAGE_HASHES и версией wintrust.dll . Этот параметр игнорируется для файлов, отличных от PE-файлов.
/p Password Задает пароль, который используется при открытии PFX-файла. /f Используйте параметр, чтобы указать PFX-файл.
/p7 Путь Указывает, что для каждого заданного файла содержимого создается файл PKCS #7. PKCS #7-файлы называются path\filename.p7>.<><
/p7ce Value Задает параметры для подписанного содержимого PKCS #7. Задайте значение для Embedded внедрения подписанного содержимого в файл PKCS #7 или DetachedSignedData для создания подписанной части отсоединяемого PKCS #7 файла. /p7ce Если параметр не указан, подписанный контент внедрен по умолчанию.
/p7co<OID> Задает идентификатор объекта (OID), определяющий подписанное содержимое PKCS #7.
/ph Если поддерживается, генерирует хэши страниц для исполняемых файлов.
/r RootSubjectName Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/s StoreName Указывает хранилище, которое нужно открыть, когда команда выполняет поиск сертификата. Если этот параметр не указан, команда открывает My хранилище.
/sha1 Hash Задает хэш SHA1 сертификата подписи. Хэш SHA1 часто используется, если несколько сертификатов соответствуют критериям, заданным остальными параметрами.
/sm Указывает, что команда использует хранилище компьютеров вместо пользовательского хранилища.
/t URL Задает URL-адрес сервера отметок времени. Если этот параметр или /tr он не указан, подписанный файл не помечен по времени. Если метка времени завершается ошибкой, команда создает предупреждение. Этот параметр нельзя использовать с параметром /tr .
/td alg Используется с параметром /tr, чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161. Примечание. Если /td метка времени не указана, команда создает ошибку.
/tr URL Задает URL-адрес сервера отметок времени RFC 3161. Если этот параметр или /t он не указан, подписанный файл не помечен по времени. Если метка времени завершается ошибкой, команда создает предупреждение. Этот параметр нельзя использовать с параметром /t .
/u Usage Задает расширенное использование ключа (EKU), которое должно быть представлено в сертификате подписи. Значение использования может быть задано идентификатором объекта или строкой. Использование по умолчанию — Code Signing или 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 :

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

Проверка параметров команды

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

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

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

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

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

SignTool возвращает один из следующих кодов выхода при завершении:

Код выхода Description
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

См. также

Использование signTool для подписывания файла

Общие сведения о подписи кода