Скачали .dmg, не уверены, что внутри именно то, что должно быть — а не модифицированный злоумышленником установщик. Хотите проверить цифровую подпись, не открывая и не монтируя образ. Это возможно, и я покажу несколько способов — от самого простого до более глубокого, с проверкой сертификата и хеш-сумм.
- Зачем вообще проверять подпись .dmg
- Что понадобится
- Быстрая проверка: codesign
- Проверка нотаризации: stapler
- Проверка через Gatekeeper: spctl
- Сравнение способов проверки
- Проверка хеш-суммы — простой, но мощный метод
- Что делать в зависимости от вашей ситуации
- Частые ошибки при проверке
- Как лучше сделать: мой практический совет
- Итог
Зачем вообще проверять подпись .dmg
Когда разработчик подписывает дисковый образ, macOS может подтвердить, что:
- файл не был изменён после подписи (целостность);
- его действительно подписал конкретный разработчик с действующим сертификатом (подлинность).
Проверка до установки особенно важна, когда вы скачали файл не с официального сайта, получили по почте, или просто хотите перестраховаться с малознакомым софтом.
Что понадобится
Никакой установки дополнительных программ не требуется. Всё уже есть в macOS:
- утилита
codesign— проверка кодовой подписи; - утилита
stapler— проверка нотаризации; - утилита
spctl— оценка политики Gatekeeper; - утилита
shasumилиopenssl dgst— подсчёт хеша.
Откройте Terminal (Программы → Утилиты → Терминал) и можно работать.
Быстрая проверка: codesign
Самый простой способ — посмотреть, подписан ли .dmg и насколько эта подпись валидна с точки зрения macOS.
- Откройте Терминал.
- Введите команду:
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 из неофициального источника и хотите максимум проверок.
Сделайте всё и сразу:
- Сравните хеш с официальным сайтом (если есть).
- Проверьте
codesign --verify --deep --strict. - Проверьте
stapler validate. - Проверьте
spctl --assess --type install.
Если хотя бы один шаг выдаёт ошибку или отказ — пересмотрите установку.
Ситуация 3: вы разработчик и хотите проверить свой .dmg перед публикацией.
Используйте codesign --verify --deep --strict и stapler validate. Также полезно проверить, что внутри образа все приложения и пакеты тоже подписаны корректно — для этого можно примонтировать образ и запустить ту же проверку на его содержимое.
Частые ошибки при проверке
- Проверяют только наличие подписи, но не её валидность. Файл может быть подписан, но с просроченным сертификатом или изменён после подписи. Всегда используйте
--verifyи--strict, а не просто-d. - Забувают про нотаризацию. Подпись есть, но Apple этот файл не проверяла. Это нормально для старых версий софта, но для свежих — отсутствие нотаризации повод задуматься.
- Сравнивают хеш с непроверенного источника. Если хеш скачан с чужого форума или зеркала, он ничего не гарантирует. Берите хеш только с официального сайта или из доверенного канала.
- Путают проверку .dmg и .app. Для приложений внутри образа используются другие пути и ключи. Проверяйте именно тот файл, который собираетесь открывать.
- Игнорируют ошибки Gatekeeper. Если
spctlговоритrejected, macOS тоже не даст установить без ручного обхода. Это не просто предупреждение — это сигнал, что подпись или нотаризация не в порядке.
Как лучше сделать: мой практический совет
Я обычно делаю так:
- Смотрю хеш, если он есть на сайте. Это быстро и исключает подмену на уровне файла.
- Запускаю
codesign --verify --deep --strict --verbose=4— убеждаюсь, что подпись валидна и все вложенные компоненты на месте. - Если файл свежий и от известного разработчика, проверяю
stapler validate— нотаризация добавляет доверия.
Если все три шага проходят — можно устанавливать. Если хотя бы один вызывает сомнения — лучше поискать альтернативный источник или связаться с разработчиком.
Итог
Проверить подпись .dmg в macOS без установки — дело пары минут в Терминале. Основные инструменты: codesign для подписи, stapler для нотаризации, spctl для оценки Gatekeeper и shasum для сравнения хеша. Комбинируя эти проверки, вы можете с высокой уверенностью понять, стоит ли доверять файлу. Главное — не ограничиваться одним поверхностным взглядом, а проверять и подпись, и нотаризацию, и при возможности сверять хеш с официальным источником.
