Как проверить подпись .dmg-файла в macOS без установки

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

Зачем вообще проверять подпись .dmg

Когда разработчик подписывает дисковый образ, macOS может подтвердить, что:

  • файл не был изменён после подписи (целостность);
  • его действительно подписал конкретный разработчик с действующим сертификатом (подлинность).

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

Что понадобится

Никакой установки дополнительных программ не требуется. Всё уже есть в macOS:

  • утилита codesign — проверка кодовой подписи;
  • утилита stapler — проверка нотаризации;
  • утилита spctl — оценка политики Gatekeeper;
  • утилита shasum или openssl dgst — подсчёт хеша.

Откройте Terminal (Программы → Утилиты → Терминал) и можно работать.

Быстрая проверка: codesign

Самый простой способ — посмотреть, подписан ли .dmg и насколько эта подпись валидна с точки зрения macOS.

  1. Откройте Терминал.
  2. Введите команду:
codesign -dv --verbose=4 /путь/к/файлу.dmg

Если файл подписан, вы увидите поле Authority — там будет указан разработчик (например, Developer ID Application: Company Name (TEAMID)). Если подпись отсутствует или повреждена, команда либо не покажет эти поля, либо выдаст ошибку.

Для более строгой проверки с выводом сертификата:

codesign --verify --deep --strict --verbose=4 /путь/к/файлу.dmg

Если всё в порядке, вы получите сообщение вроде valid on disk и satisfies its Designated Requirement. Если подпись не проходит — увидите конкретную причину.

Проверка нотаризации: stapler

Apple нотаризует приложения и установщики — это дополнительный слой проверки. Для .dmg нотаризация тоже может присутствовать.

Команда:

stapler validate /путь/к/файлу.dmg

Если файл нотаризован, вы увидите The validate action worked! и статус approved. Если нет — получите понятное сообщение об отсутствии тикета нотаризации.

Это не замена проверке подписи, а дополнение: нотаризация означает, что Apple проверила этот конкретный файл перед тем, как разрешить его распространение вне App Store.

Проверка через Gatekeeper: spctl

Если хотите узнать, как macOS сам оценит этот файл при попытке открытия:

spctl --assess --type install --verbose /путь/к/файлу.dmg

Ключ --type install именно для установщиков и образов. Если файл проходит проверку, вы увидите accepted. Если нет — rejected с пояснением причины.

Этот способ полезен, когда нужно понять: примет ли Gatekeeper этот .dmg при двойном клике, или выскупит предупреждение.

Сравнение способов проверки

Способ Что проверяет Сложность Когда использовать
codesign Целостность и подпись Низкая Быстрая проверка, хочется увидеть, кто подписал
codesign --verify --deep --strict Строгая валидация подписи и всех вложенных компонентов Средняя Нужна уверенность, что внутри образа ничего не повреждено
stapler validate Наличие нотаризации Низкая Хотите убедиться, что Apple тоже проверила этот файл
spctl --assess Реакцию Gatekeeper Низкая Хотите предсказать, примет ли macOS файл при открытии
Сравнение хеша с сайтом Полное совпадение байтов Низкая Есть официальный хеш — хотите исключить подмену на уровне файла

Проверка хеш-суммы — простой, но мощный метод

Цифровая подпись проверяет неизменность файла, но если у вас есть официальный хеш (SHA-256) с сайта разработчика, можно просто сравнить:

shasum -a 256 /путь/к/файлу.dmg

Сверьте вывод с тем, что указано на сайте. Совпало — файл идентичен. Не совпало — что-то изменилось, и это повод не устанавливать.

Если разработчик публикует хеш в виде подписанного файла или через HTTPS-страницу с сертификатом EV, такая проверка надёжнее, чем просто скачанный где-то хеш.

Что делать в зависимости от вашей ситуации

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

Запустите codesign -dv --verbose=4 и проверьте, что в Authority указан известный вам разработчик. Если там непонятная строка или подпись отсутствует — не устанавливайте.

Ситуация 2: вы получили .dmg из неофициального источника и хотите максимум проверок.

Сделайте всё и сразу:

  1. Сравните хеш с официальным сайтом (если есть).
  2. Проверьте codesign --verify --deep --strict.
  3. Проверьте stapler validate.
  4. Проверьте spctl --assess --type install.

Если хотя бы один шаг выдаёт ошибку или отказ — пересмотрите установку.

Ситуация 3: вы разработчик и хотите проверить свой .dmg перед публикацией.

Используйте codesign --verify --deep --strict и stapler validate. Также полезно проверить, что внутри образа все приложения и пакеты тоже подписаны корректно — для этого можно примонтировать образ и запустить ту же проверку на его содержимое.

Частые ошибки при проверке

  • Проверяют только наличие подписи, но не её валидность. Файл может быть подписан, но с просроченным сертификатом или изменён после подписи. Всегда используйте --verify и --strict, а не просто -d.
  • Забувают про нотаризацию. Подпись есть, но Apple этот файл не проверяла. Это нормально для старых версий софта, но для свежих — отсутствие нотаризации повод задуматься.
  • Сравнивают хеш с непроверенного источника. Если хеш скачан с чужого форума или зеркала, он ничего не гарантирует. Берите хеш только с официального сайта или из доверенного канала.
  • Путают проверку .dmg и .app. Для приложений внутри образа используются другие пути и ключи. Проверяйте именно тот файл, который собираетесь открывать.
  • Игнорируют ошибки Gatekeeper. Если spctl говорит rejected, macOS тоже не даст установить без ручного обхода. Это не просто предупреждение — это сигнал, что подпись или нотаризация не в порядке.

Как лучше сделать: мой практический совет

Я обычно делаю так:

  1. Смотрю хеш, если он есть на сайте. Это быстро и исключает подмену на уровне файла.
  2. Запускаю codesign --verify --deep --strict --verbose=4 — убеждаюсь, что подпись валидна и все вложенные компоненты на месте.
  3. Если файл свежий и от известного разработчика, проверяю stapler validate — нотаризация добавляет доверия.

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

Итог

Проверить подпись .dmg в macOS без установки — дело пары минут в Терминале. Основные инструменты: codesign для подписи, stapler для нотаризации, spctl для оценки Gatekeeper и shasum для сравнения хеша. Комбинируя эти проверки, вы можете с высокой уверенностью понять, стоит ли доверять файлу. Главное — не ограничиваться одним поверхностным взглядом, а проверять и подпись, и нотаризацию, и при возможности сверять хеш с официальным источником.

Оцените статью
PEFile — Безопасность и технологии простым языком