SignTool

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

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

SignTool доступен в составе пакета Windows SDK, который можно скачать из пакета Windows SDK.

Примечание

Для Windows 10 SDK, Windows 10 HLK, Windows 10 WDK и Windows 10 сборки ADK 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 разделе Параметры команды подписывания.
timestamp Файлы меток времени. Список параметров, поддерживаемых командой , см. в timestamp разделе Параметры команды метки времени.
verify Проверяет цифровую подпись файлов. Определяет, был ли сертификат подписи выдан доверенным центром сертификации, был ли отозван сертификат подписи и, при необходимости, действителен ли сертификат подписи для определенной политики. Список параметров, поддерживаемых командой, см. в verify разделе Проверка параметров команды.

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

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

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

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

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

Примечание

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

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

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

Параметр команды "sign" Описание
/a Автоматически выбирает лучший сертификат подписи. SignTool находит все допустимые сертификаты, удовлетворяющие всем указанным условиям, и выбирает тот, который действителен в течение самого длительного времени. Если этот параметр отсутствует, SignTool ожидает найти только один действительный сертификат подписи.
/acФайл Добавляет еще один сертификат из файла в блок подписи.
/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 параметр не указан во время подписывания, команда создает ошибку.
/fd certHash Если указать строку "certHash", команда будет использовать алгоритм, указанный в сертификате подписи. Примечание. Если /fd параметр не указан во время подписывания, команда создает ошибку.
/iIssuerName Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика.
/kcPrivKeyContainerName Задает имя контейнера закрытого ключа.
/nSubjectName Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.
/nph Если поддерживается, отключает хэши страниц для исполняемых файлов. Значение по умолчанию определяется переменной среды SIGNTOOL_PAGE_HASHES и версией wintrust.dll . Этот параметр игнорируется для файлов, отличных от PE-файлов.
/pПароль Задает пароль, который используется при открытии PFX-файла. Используйте параметр , /f чтобы указать PFX-файл.
/p7Путь Указывает, что для каждого заданного файла содержимого создается файл PKCS #7. Файлы PKCS #7 называются <path>\<filename.p7>.
/p7ceЗначение Задает параметры для подписанного содержимого PKCS #7. Задайте для параметра Значение значение 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), которое должно быть представлено в сертификате подписи. Значение использования может быть задано идентификатором объекта или строкой. По умолчанию используется или Code Signing1.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 выполняет поиск в базах данных каталога, чтобы определить, подписан ли файл в каталоге. Если файл не выполнен ни в одном каталоге, SignTool пытается проверить внедренную подпись файла. Рекомендуется использовать этот параметр при проверке файлов, которые могут быть подписаны в каталоге. Примеры файлов, которые могут быть подписаны или не могут быть подписаны, включают файлы или драйверы Windows.
/ad Выполняет поиск каталога, используя базу данных каталогов по умолчанию.
/all Проверяет все подписи в файле с несколькими подписями.
/as Выполняет поиск каталога, используя базу данных каталога системных компонентов (драйверов).
/agCatDBGUID Находит каталог в базе данных каталога, определяемой идентификатором GUID.
/cCatFile Задает файл каталога по имени.
/d Выводит описание и URL-адрес описания. Windows Vista и более ранние версии: этот параметр не поддерживается.
/dsИндекс Проверяет подпись в определенной позиции.
/hash{SHA1|SHA256} Задает необязательный алгоритм хэширования, который должен использоваться при поиске файла в каталоге.
/kp Выполняет проверку с помощью политики подписывания драйвера в режиме ядра x64.
/ms Использует несколько семантик проверки. Это поведение по умолчанию для вызова WinVerifyTrust .
/oВерсия Проверяет файл в соответствии с версией операционной системы. Параметр версии имеет вид PlatformID<>:<VerMajor>.< VerMinor>.< BuildNumber>. Мы рекомендуем использовать /o параметр . Если /o параметр не указан, SignTool может возвращать непредвиденные результаты. Например, если не включить /o, системные каталоги, которые правильно проверяются в более старой операционной системе, могут быть неправильно проверены в более новой операционной системе.
/p7 Проверяет файлы PKCS #7. Существующие политики не используются для проверки PKCS #7. SignTool проверяет подпись и создает цепочку для сертификата подписи.
/pa Указывает, что используется политика проверки подлинности по умолчанию. /pa Если параметр не указан, SignTool использует политику проверки драйверов Windows. Этот параметр нельзя использовать с параметрами catdb .
/pgPolicyGUID Задает политику проверки по идентификатору GUID. Идентификатор GUID соответствует ActionID политике проверки. Этот параметр нельзя использовать с параметрами catdb .
/ph Печать и проверка хэш-значений страницы. Windows Vista и более ранние версии: этот параметр не поддерживается.
/rRootSubjectName Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата.
/tw Указывает, что команда создает предупреждение, если подпись не имеет метки времени.

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

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

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

При завершении signTool возвращает один из следующих кодов выхода.

Код выхода Описание
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