Я загрузил приложение из Интернета с помощью Safari. После его запуска macOS уведомляет, что приложение от неизвестного разработчика.
Как macOS может определить эту информацию? Где хранятся метаданные подписи для приложения?
Я загрузил приложение из Интернета с помощью Safari. После его запуска macOS уведомляет, что приложение от неизвестного разработчика.
Как macOS может определить эту информацию? Где хранятся метаданные подписи для приложения?
Ответы:
Информация хранится в расширенных атрибутах, а дополнительная информация может быть встроена в приложение.
Эта информация о карантине хранится как расширенный атрибут . Используйте xattr
инструмент для просмотра атрибутов, связанных с файлом или приложением.
Атрибут, вызывающий это сообщение com.apple.quarantine
.
См. Как удалить «расширенные атрибуты» для файла в Mac OS X? и приложение не может быть открыто, потому что оно от неизвестного разработчика для более подробной информации.
Расширенный атрибут используется Gatekeeper в macOS и обсуждается в разделе Как установить (восстановить) атрибут com.apple.quarantine?
Дополнительная цифровая подпись, встроенная в приложение, используется для определения разработчика приложения. Если подпись не найдена, macOS представляет приложение от неизвестного разработчика.
Фактически сообщение «Неопознанный разработчик ...» является результатом сочетания обеих задач: проверки атрибута com.apple.quarantine и ресурсов для подписи кода (в * / Contents / _CodeSignature / CodeResources), в то время как фактический статус подписи равен определяется исключительно * / CodeResources .
Вы можете получить расширенный атрибут, введя:
$ xattr -p com.apple.quarantine /Applications/*.app
Доступ к информации для подписи кода осуществляется путем ввода:
$ codesign -dvvv /Applications/*.app
Пример:
$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240
Наиболее важной частью является цепочка сертификатов (и цепочка доверия):
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Здесь видны три разных авторитета:
Это означает, что приложение подписано сертификатом разработчика, опубликовано и подписано промежуточным органом Apple по разработке, который сам публикуется и подписывается корневым центром сертификации Apple.
Эта цепочка квалифицирует Google (или точнее: команду / подразделение Google, Inc. (EQHXZ8M8AV)) как разработчика, идентифицированного Apple.
Вы также можете кодировать приложения либо самостоятельно, либо с помощью сертификата кодирования от другого промежуточного / корневого органа, но это не побеждает Gatekeeper.
Теперь возможны четыре перестановки при условии, что включен Gatekeeper (но без учета самоподписания / подписи пришельцев):
В первых двух случаях приложение просто запустится. В третьем случае вы получите сообщение Unindentified Developer . Вы можете решить эту проблему, удалив расширенный атрибут xattr -d com.apple.quarantine *
(= case 1). В четвертом случае вы получите "* был загружен из Интернета, вы уверены, что хотите открыть его?"
Как macOS может определить эту информацию? Где хранятся метаданные подписи для приложения?
Подпись хранится в самом двоичном файле приложения с некоторыми дополнительными данными в комплекте приложения (в файле Contents/_CodeSignature/CodeResources
).
Вы можете получить некоторую информацию о подписи, используя утилиту командной строки codesign
- например:
# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68