Введение / Зачем это нужно
Проверка цифровой подписи приложения — ключевой шаг для обеспечения безопасности вашего macOS. Подпись гарантирует, что код не был изменён после выпуска разработчиком и что он исходит от проверенного источника. Система Gatekeeper использует эти данные для автоматического блокирования недоверенного ПО. Данное руководство поможет вам самостоятельно верифицировать любую загруженную программу, что особенно полезно при получении ошибок типа «Недоступный разработчик» или для аудита установленного ПО.
Требования / Подготовка
- macOS: любая современная версия (Sierra и новее).
- Права: стандартные права пользователя. Для проверки системных приложений могут потребоваться права администратора (используйте
sudoв начале команды, если получите ошибку доступа). - Знакомство с Terminal: базовое понимание навигации по файловой системе (
cd,ls).
Пошаговая инструкция
Шаг 1: Найдите приложение в Finder
Перейдите в папку, где лежит проверяемое приложение (например, Загрузки или Программы). Обычно приложения на macOS имеют расширение .app и представляют собой пакет (папку). Запомните или скопируйте полное имя файла (например, Telegram.app).
Шаг 2: Откройте Terminal и перейдите к приложению
Запустите Terminal. С помощью команды cd перейдите в директорию с вашим приложением. Например, если приложение лежит в Загрузках:
cd ~/Downloads
Можно также перетащить файл .app прямо в окно Terminal — автоматически вставится полный путь.
Шаг 3: Проверьте детали подписи с помощью codesign
Команда codesign предоставляет низкоуровневую информацию о подписи. Выполните:
codesign -dv --verbose=4 "Telegram.app" 2>&1 | grep -E "Authority|TeamIdentifier|Identifier"
Что делает команда:
-dv— запрашивает детали верификации.--verbose=4— максимально подробный вывод.2>&1— объединяет потоки ошибок и вывода (чтобы поймать все данные).grep— фильтрует только строки с цепочкой доверия (Authority), идентификатором команды разработчика (TeamIdentifier) и идентификатором самого приложения (Identifier).
Пример успешного вывода:
Authority=Developer ID Application: Telegram FZ-LLC (Y29tcGxleCB...)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
TeamIdentifier=Y29tcGxleCB...
Identifier=ru.keepcoder.Telegram
Если команда завершится с ошибкой code object is not signed at all, приложение не подписано.
Шаг 4: Оцените, доверяет ли система этому приложению (spctl)
Команда spctl (SecAssessment) имитирует работу Gatekeeper. Она проверяет не только факт подписи, но и доверие к сертификату издателя.
spctl -a -vv "Telegram.app"
Ключевые параметры:
-a— провести оценку.-vv— подробный вывод.
Примеры вывода:
- Доверено:
accepted(и, возможно,source=Notarizedдля нотариально заверенных приложений). - Отклонено:
rejectedс причиной, например:source=Notarized— нотариальная проверка не пройдена (актуально для macOS Catalina и новее).source=Developer ID— разработчик не в списке доверенных (если сертификат отозван или неизвестен системе).source=System— системное приложение, но с проблемами подписи.
Шаг 5: Ручная проверка через Finder (без Terminal)
Если терминал кажется сложным, можно сделать частичную проверку визуально:
- В Finder найдите файл
.app. - Нажмите на нём Ctrl+клик (или правой кнопкой) и выберите «Показать содержимое пакета».
- В открывшейся папке перейдите в
Contents/_CodeSignature/. - Если в этой папке присутствует файл
CodeResources(и, возможно,CodeDirectory,CodeSignature), это указывает на наличие базовой подписи. Отсутствие этой папки — признак неподписанного приложения.
Шаг 6: Проверка подписи для конкретного бинарного файла
Иногда полезно проверить не весь .app пакет, а исполняемый файл внутри него. Это может дать более точную информацию.
codesign -dv --verbose=4 "Telegram.app/Contents/MacOS/Telegram" 2>&1 | grep -E "Authority|TeamIdentifier"
Путь Contents/MacOS/ является стандартным для исполняемых файлов внутри macOS-приложений.
Проверка результата
Вы успешно проверили подпись, если:
- Команда
codesignвывела цепочку сертификатов (Authority=...) и не сообщила об ошибке «not signed». - Команда
spctlпоказалаaccepted. - В Finder присутствует папка
_CodeSignatureс файлами.
Если spctl вернул rejected, но codesign показал валидную цепочку, проблема, скорее всего, в настройках Gatekeeper (например, нотариальная проверка не пройдена) или в отзыве сертификата разработчика.
Возможные проблемы
codesign: error: invalid argument— Убедитесь, что путь к.appуказан верно и кавычки корректны, особенно если в имени есть пробелы. Лучше перетащить файл в Terminal.code object is not signed at all— Приложение не имеет цифровой подписи. Запуск может быть заблокирован Gatekeeper. Рекомендуется найти официальную подписанную версию.spctl: rejectedс причинойsource=Notarized— Приложение прошло подпись, но не успело пройти обязательную нотариальную проверку у Apple (для macOS Catalina 10.15+). Свяжитесь с разработчиком.spctl: rejectedс причинойsource=Developer ID— Сертификат разработчика недоверен (возможно, отозван, или вы используете устаревшую версию macOS, не знающую новый корневой сертификат). Проверьте, есть ли обновление приложения.- Ошибка доступа (Operation not permitted) — Попробуйте выполнить команду с
sudo(например,sudo codesign -dv ...). Будьте осторожны, запуская неизвестные приложения с повышенными привилегиями.