Статьи · Безопасность

Как проверить цифровую подпись файла (EXE, MSI) — защита от подделок

Скачали установщик с сайта, антивирус молчит — но хочется убедиться, что EXE или MSI действительно выпустил тот разработчик, за которого он себя выдаёт, а не кто-то, кто подменил файл по дороге. Для этого у исполняемых файлов и инсталляторов Windows есть встроенный механизм — цифровая подпись Authenticode. Разбираем, что именно она подтверждает, как её проверить тремя способами и как не перепутать с совсем другой сущностью — файлом формата .sig.

Коротко: цифровую подпись EXE/MSI проверяют через «Свойства» файла → вкладка «Цифровые подписи», через PowerShell-команду Get-AuthenticodeSignature или через signtool verify. Статус «Действительна» подтверждает издателя и то, что файл не менялся после подписания — но НЕ гарантирует безопасность содержимого: подписанные вредоносные программы существуют.

Обновлено: 10 ноября 2026 Редакция Loadfile Чтение 11 мин
Как проверить цифровую подпись файла EXE и MSI
Содержание
  1. Что подтверждает цифровая подпись файла и что — нет
  2. Как проверить подпись через «Свойства» файла в Windows
  3. Как читать результат проверки — таблица статусов
  4. Проверка подписи через PowerShell (Get-AuthenticodeSignature)
  5. Проверка через SignTool — для продвинутых и разработчиков
  6. Как проверить сертификат издателя и цепочку доверия
  7. Отдельно про MSI-установщики: та же логика?
  8. Почему у некоторых безопасных программ подписи нет
  9. Типичные ошибки при проверке подписи
  10. Цифровая подпись файла — это не файл .sig
  11. Что делать, если подписи нет или она недействительна
  12. Часто задаваемые вопросы

Что подтверждает цифровая подпись файла и что — нет

Технология, которой подписаны исполняемые файлы и инсталляторы Windows, называется Authenticode. Издатель получает код-сайнинг-сертификат у доверенного центра сертификации, подписывает им EXE или MSI — и в файл встраивается криптографическая подпись, которую Windows умеет проверять без обращения к издателю напрямую.

Подпись отвечает ровно на два вопроса: кто выпустил этот файл и не менялось ли его содержимое после подписания. Если хотя бы один байт файла изменился — подпись становится недействительной, и Windows сообщит об этом. Это делает Authenticode удобным инструментом для обнаружения подмены файла при пересылке или взломе сайта-источника.

!
Подпись ≠ гарантия безопасности

Действительная подпись подтверждает издателя и целостность файла, но ничего не говорит о том, что внутри файла нет вредоносного кода. Известны случаи, когда код-сайнинг-сертификаты крали или получали мошенническим путём, и ими подписывали малварь — антивирусные компании периодически отзывают такие сертификаты. Подпись — один из сигналов доверия, а не окончательный вердикт.

Как проверить подпись через «Свойства» файла в Windows

Самый быстрый способ для обычного пользователя — штатное окно свойств файла, без установки дополнительных программ.

Что искать на вкладке «Цифровые подписи»

  1. Нажмите правой кнопкой мыши на EXE- или MSI-файл и выберите «Свойства».
  2. Откройте вкладку «Цифровые подписи». Если вкладки нет — файл не содержит встроенной подписи вообще (см. раздел о статусах ниже).
  3. Выберите подпись в списке и нажмите «Сведения». Откроется окно с общим статусом подписи вверху.
  4. Нажмите «Просмотреть сертификат», чтобы увидеть, кем и когда выдан сертификат издателя, и срок его действия.
  5. Проверьте имя издателя на вкладке «Общие» сертификата — оно должно совпадать с ожидаемым разработчиком программы, а не быть похожим на него по написанию.

Если результат наверху окна — «Эта цифровая подпись действительна», файл прошёл базовую проверку целостности и происхождения. Любая другая формулировка требует дополнительного внимания — полный разбор статусов ниже.

Как читать результат проверки — таблица статусов

PowerShell-команда Get-AuthenticodeSignature (разберём её в следующем разделе) возвращает один из пяти статусов — они же, по сути, описывают и то, что можно увидеть в окне «Свойства».

СтатусЧто означаетЧто делать
ValidПодпись действительна: цепочка сертификатов доверенная, содержимое файла не менялось после подписанияМожно доверять происхождению файла; дополнительно сверьте имя издателя
NotSignedФайл не содержит цифровой подписи вообщеНе приговор сам по себе — многие безопасные программы не подписаны (см. ниже); проверяйте файл другими способами
HashMismatchПодпись есть, но контрольная сумма файла не совпадает с той, что была на момент подписания — содержимое изменили после подписанияНе запускать файл: это прямой признак подмены или повреждения
NotTrustedСертификат издателя не входит в цепочку доверия системы (например, самоподписанный или от неизвестного ЦС)Запускать с осторожностью, только если издатель заведомо известен и ожидаем
UnknownErrorПодпись есть, но проверить её не удалось — например, сертификат отозван или истёк срок его действияВыяснить причину отдельно (отзыв сертификата — серьёзный повод для подозрений), не запускать файл не глядя

Проверка подписи через PowerShell (Get-AuthenticodeSignature)

PowerShell даёт более подробный и удобный для копирования результат, чем окно «Свойства», и его проще применить сразу к нескольким файлам.

  1. Откройте PowerShell (меню Пуск → «Windows PowerShell»).
  2. Выполните команду Get-AuthenticodeSignature "C:\путь\к\файлу.exe" — замените путь на реальный, с кавычками, если в пути есть пробелы.
  3. Посмотрите на поле Status в выводе — это один из пяти статусов из таблицы выше.
  4. Посмотрите на поле SignerCertificate — там видно имя издателя (поле Subject) и срок действия сертификата.
  5. Для проверки сразу нескольких файлов используйте Get-ChildItem "C:\Downloads\*.exe","C:\Downloads\*.msi" | Get-AuthenticodeSignature — команда построчно покажет статус каждого файла в папке.

Документация команды с полным списком параметров и возвращаемых полей — у Microsoft Learn.

Проверка через SignTool — для продвинутых и разработчиков

SignTool — утилита из Windows SDK, которой обычно подписывают файлы сами разработчики, но она же умеет и проверять подпись с более строгими настройками, чем штатный графический интерфейс. Это удобно в сборочных и CI-процессах, где нужен машинно читаемый результат.

  1. Установите Windows SDK, если SignTool ещё не установлен (входит в состав SDK, устанавливается отдельно от Visual Studio).
  2. Выполните команду signtool verify /pa "C:\путь\к\файлу.exe" — ключ /pa проверяет подпись по политике Authenticode, используемой по умолчанию в Windows.
  3. Прочитайте код возврата. 0 — подпись успешно проверена; 1 — подпись не прошла проверку; другие коды соответствуют конкретным ошибкам (отсутствие подписи, проблема с цепочкой сертификатов и т. д.).

SignTool дополнительно проверяет, что цепочка сертификатов ведёт к доверенному корневому центру сертификации, и учитывает отзыв сертификата через список CRL — это строже, чем базовая проверка через окно «Свойства». Полный синтаксис и перечень ключей — в официальной документации Microsoft Learn.

Как проверить сертификат издателя и цепочку доверия

Сама по себе подпись бесполезна без доверия к тому, кто её поставил. Поэтому Windows проверяет не только криптографическую корректность подписи, но и цепочку сертификатов: сертификат издателя должен быть выдан промежуточным центром сертификации, а тот, в свою очередь, — одним из корневых ЦС, которым доверяет операционная система.

В окне «Просмотреть сертификат» (см. раздел про «Свойства») вкладка «Путь сертификации» показывает всю цепочку — от сертификата издателя до корневого ЦС. Если рядом с каким-то звеном цепочки стоит красный крестик, цепочка доверия нарушена, и Windows не сможет подтвердить подлинность издателя, даже если сама подпись технически корректна.

Также стоит обращать внимание на срок действия сертификата издателя и на временную метку (timestamp) подписи — если она присутствует, подпись остаётся действительной и после истечения срока действия самого сертификата, потому что фиксирует момент, когда файл был подписан, а не момент проверки.

Отдельно про MSI-установщики: та же логика?

Да — MSI-файлы подписываются и проверяются по тому же механизму Authenticode, что и EXE: через «Свойства» → «Цифровые подписи» или через Get-AuthenticodeSignature, та же таблица статусов, те же выводы. Разница с EXE скорее практическая: MSI часто распространяют корпоративные инсталляторы, которые ставят ПО через групповые политики, и там подпись дополнительно подтверждает, что пакет не подменили перед массовым развёртыванием на множество компьютеров. Если нужно разобраться, что такое формат MSI в целом и чем он отличается от обычного EXE-установщика, — отдельный разбор в статье файл MSI: что это и как его открыть.

Почему у некоторых безопасных программ подписи нет

Отсутствие подписи само по себе не означает, что файл опасен. Код-сайнинг-сертификат стоит денег и требует ежегодного продления, поэтому многие небольшие open-source-проекты и бесплатные утилиты энтузиастов распространяются без подписи — у разработчика просто нет бюджета на сертификат. Внутренний корпоративный софт, который компания пишет и использует только у себя, тоже часто остаётся неподписанным: его и так распространяют по контролируемым каналам, а не через открытый интернет.

Команды, которые разрабатывают и поставляют клиентам собственное ПО, обычно сами подписывают свои установщики цифровой подписью — так заказчик видит подтверждённого издателя уже при первом запуске, без дополнительных объяснений. Этим, в частности, занимается команда YuSMP Group при заказной разработке и аудите ПО.

Типичные ошибки при проверке подписи

Доверять только наличию подписи, не читая имя издателя

Windows покажет «Эта цифровая подпись действительна» для ЛЮБОГО корректно подписанного файла — включая тот, что подписан сертификатом неизвестной компании с похожим на бренд названием. Статус «действительна» проверяет криптографию, а не то, стоит ли доверять конкретному издателю: имя в сертификате нужно сверять самостоятельно.

Считать NotSigned автоматическим признаком опасности

Отсутствие подписи — это нейтральный факт, а не диагноз. Большая часть легитимного бесплатного и open-source софта не подписана именно из-за стоимости сертификата, а не из-за злого умысла разработчика.

Не проверять MSI отдельно, если проверили EXE из того же комплекта

Если инсталлятор распространяется и как EXE, и как MSI, подпись нужно смотреть у того файла, который вы реально запускаете, — встроенный лаунчер и сам MSI-пакет технически являются разными файлами и могут быть подписаны (или не подписаны) по-разному.

Игнорировать предупреждение об отозванном сертификате

Статус вроде UnknownError, вызванный отзывом сертификата издателя, — это не техническая мелочь, а сигнал, что сам центр сертификации или издатель посчитали сертификат скомпрометированным. Такой файл не стоит запускать, пока не выяснится причина отзыва.

💡
Это не файл .sig

Не путайте проверку встроенной Authenticode-подписи EXE/MSI с файлами формата .sig — отдельным контейнером детач-подписи (например, в GPG), который хранится рядом с проверяемым файлом отдельным документом. Если у вас на диске лежит именно файл с расширением .sig и его нужно открыть, это другая задача и другой инструмент — разбор в статье чем открыть файл .sig.

Что делать, если подписи нет или она недействительна

  1. Не запускайте файл сразу. Отсутствие или недействительность подписи — повод на шаг притормозить, а не однозначный запрет.
  2. Проверьте файл на вирусы онлайн. Мультисканер из нескольких антивирусных движков — быстрый дополнительный сигнал; подробный порядок такой проверки — в статье как проверить файл на вирусы онлайн.
  3. Сверьте контрольную сумму файла с указанной на официальном сайте разработчика, если она опубликована, — это альтернативный способ подтвердить целостность файла без подписи, разобранный в статье как проверить контрольную сумму файла.
  4. Скачайте файл заново с официального источника, если есть сомнения в том, откуда он взялся изначально.
  5. При статусе HashMismatch или отозванном сертификате — не запускайте файл вообще и удалите скачанную копию.

Часто задаваемые вопросы

Что означает статус «Цифровая подпись недоступна»?

Это означает, что файл вообще не содержит встроенной цифровой подписи — в терминах PowerShell это статус NotSigned. Сам по себе это не признак опасности: часть легитимного бесплатного и open-source софта распространяется без подписи, потому что код-сайнинг-сертификат стоит денег и требует продления.

Можно ли доверять файлу без цифровой подписи?

Отсутствие подписи не делает файл автоматически опасным, но и не подтверждает его происхождение. Для файла без подписи стоит дополнительно проверить источник загрузки, прогнать файл через онлайн-антивирус и, если возможно, сверить контрольную сумму с опубликованной разработчиком.

Чем цифровая подпись отличается от антивирусной проверки?

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

Как проверить подпись MSI-установщика отдельно от EXE?

Точно так же, как и для EXE: через «Свойства» файла → вкладку «Цифровые подписи» или командой Get-AuthenticodeSignature "C:\путь\к\файлу.msi" в PowerShell. Если инсталлятор идёт в виде EXE-лаунчера и отдельного MSI-пакета, подпись стоит проверить у обоих файлов — это разные файлы, которые могут быть подписаны по-разному.

Что делать, если подпись есть, но имя издателя незнакомое?

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

Можно ли подделать цифровую подпись?

Саму криптографическую подпись подделать практически невозможно без закрытого ключа издателя, но известны случаи кражи или мошеннического получения код-сайнинг-сертификатов, которыми затем подписывали вредоносные программы. Поэтому действительная подпись — сильный, но не абсолютный сигнал доверия: отозванные по этой причине сертификаты как раз и дают статус UnknownError при проверке.

Нужна ли цифровая подпись для скриптов PowerShell и BAT?

Скрипты тоже можно подписывать и проверять той же командой Get-AuthenticodeSignature, но в отличие от EXE/MSI, скриптовые файлы технически способны выполняться и без подписи — если политика выполнения PowerShell это разрешает. Подробный разбор проверки именно .bat/.vbs/.ps1-файлов перед запуском — в статье как проверить скрипт перед запуском.

Читайте также

Читайте также