Answers:
该信息存储在扩展属性中,而其他信息可能嵌入在应用程序中。
此隔离信息存储为扩展属性。使用该xattr
工具查看与文件或应用程序关联的属性。
导致此消息的属性是com.apple.quarantine
。
请参阅如何在Mac OS X中删除文件上的“扩展属性”?和App无法打开,因为它来自一个身份不明的开发人员,以获取更多详细信息。
扩展属性由macOS上的Gatekeeper使用,并将在如何设置(还原)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的根CA发行并签名。
此链条使Google(或更确切地说是Google / Inc.的团队/部门)有资格被Apple确定为开发人员。
您也可以自己对应用程序进行代码签名,也可以使用其他中间/根机构的代码签名证书对应用程序进行代码签名,但这不会克服Gatekeeper。
现在,假设启用了网闸(但不考虑自签名/外来签名),则可以进行四个排列:
在前两种情况下,该应用将简单启动。在第三种情况下,您将收到Unindentified Developer消息。您可以通过删除扩展属性来解决此问题xattr -d com.apple.quarantine *
(=情况1)。在第四种情况下,您将获得“ *是从Internet下载的,确定要打开它吗?”。
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