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.
Примечание
Для пакета SDK Windows 10, 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 обновляет системный компонент и базу данных драйверов. |
/g GUID |
Указывает, что обновляется база данных каталога, определяемая идентификатором GUID. |
/r |
Удаляет указанный каталог из базы данных каталога. Если этот параметр не указан, SignTool добавляет указанный каталог в базу данных каталога. |
/u |
Указывает, что для добавляемых файлов каталогов автоматически создается уникальное имя. Пир необходимости, файлы каталогов переименовываются, чтобы предотвратить конфликты имен с существующими файлами каталогов. Если этот параметр не указан, SignTool перезаписывает любой существующий каталог с тем же именем, что и у указанного каталога. |
Примечание
Базы данных каталога используются для автоматического поиска файлов каталога.
Параметры команды "Sign"
В следующей таблице перечислены параметры, которые могут использоваться с командой sign
.
Параметр команды "sign" | Описание |
---|---|
/a |
Автоматически выбирает лучший сертификат подписи. SignTool находит все допустимые сертификаты, удовлетворяющие всем указанным условиям, и выбирает тот, который действителен в течение самого длительного времени. Если этот параметр отсутствует, SignTool ожидает найти только один действительный сертификат подписи. |
/ac Файл |
Добавляет еще один сертификат из файла в блок подписи. |
/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 отдельно с параметрами /dg , /ds и /di . Этот параметр вызывает все три как одну атомарную операцию. |
/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", команда будет использовать алгоритм, указанный в сертификате подписи. Note: If the /fd option isn't specified while signing, the command generates an error. |
/i IssuerName |
Задает имя поставщика сертификата подписи. Это значение может быть подстрокой полного имени поставщика. |
/kc PrivKeyContainerName |
Задает имя контейнера закрытого ключа. |
/n SubjectName |
Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта. |
/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 |
Если поддерживается, генерирует хэши страниц для исполняемых файлов. |
/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. If this option or /t isn't specified, the signed file isn't time stamped. Если метка времени завершается сбоем, команда создает предупреждение. This option can't be used with the /t option. |
/u Использования |
Задает расширенное использование ключа (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
В следующей таблице перечислены параметры, которые могут использоваться с командой timestamp
.
Параметр timestamp | Описание |
---|---|
/p7 |
Присваивает файлам PKCS #7 отметки времени. |
/t URL-адрес |
Задает URL-адрес сервера отметок времени. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /t или /tr . |
/td alg |
Используется с параметром /tr , чтобы запросить алгоритм дайджеста, используемый сервером отметок времени RFC 3161. Примечание. Если /td параметр не указан во время метки времени, команда создает предупреждение. |
/tp Индекс |
Присваивает подписи метку времени в index. |
/tr URL-адрес |
Задает URL-адрес сервера отметок времени RFC 3161. Файл, получающий отметку времени, должен быть заранее подписан. Необходимо использовать параметр /tr или /t . |
Проверка параметров команды
Параметр "Verify" | Описание |
---|---|
/a |
Указывает, что все методы могут использоваться для проверки файла. Во-первых, SignTool выполняет поиск в базах данных каталога, чтобы определить, подписан ли файл в каталоге. Если файл не выполнен ни в одном каталоге, SignTool пытается проверить внедренную подпись файла. Рекомендуется использовать этот параметр при проверке файлов, которые могут быть подписаны в каталоге. Примеры файлов, которые могут быть подписаны или не могут быть подписаны, включают файлы или драйверы Windows. |
/ad |
Выполняет поиск каталога, используя базу данных каталогов по умолчанию. |
/all |
Проверяет все подписи в файле с несколькими подписями. |
/as |
Выполняет поиск каталога, используя базу данных каталога системных компонентов (драйверов). |
/ag CatDBGUID |
Находит каталог в базе данных каталога, определяемой идентификатором GUID. |
/c CatFile |
Задает файл каталога по имени. |
/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 . |
/pg PolicyGUID |
Задает политику проверки по идентификатору GUID. GUID соответствует ActionID политике проверки. This option can't be used with the catdb options. |
/ph |
Печать и проверка хэш-значений страницы. Windows Vista и более ранние версии: этот параметр не поддерживается. |
/r RootSubjectName |
Задает имя субъекта корневого сертификата, к которому должна быть протянута цепочка сертификата подписи. Это значение может быть подстрокой полного имени субъекта корневого сертификата. |
/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