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 , , sign timestamp или 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