gpt4 book ai didi

macos - OS X .dmg 签名在下载后丢失

转载 作者:行者123 更新时间:2023-12-04 23:50:23 25 4
gpt4 key购买 nike

我正在签署 .dmg包含 .app具有有效的开发者 ID 配置文件。一切都已签名,包括框架。当我运行 codesign -dvvv ,出现正确的证书和satisfies its Designated Requirement .应用程序运行良好。

但是,当我上传和下载 .dmg ,签名“消失”。当我运行 codesign -dvvv ,上面写着 code object is not signed at all . GateKeeper 自然拒绝运行应用程序。

注意:听起来很像 this issue但我肯定用正确的开发者 ID 证书和 .dmg 签名。不会出现“损坏”。

最佳答案

[注:情况在 OS X v10.11.5 和 v10.12 中发生了显着变化;此答案已更新以反射(reflect)这一点。]

通常,您真正需要签名的是磁盘镜像中的文件(主要是应用程序),而不是镜像本身。下载图像后,将在使用时检查各个项目上的签名。从 OS X 10.11.5 开始,对磁盘镜像的签名得到了适当的支持,有时甚至需要,但这是对其中的相关项目进行签名的补充。

通过 OS X v10.11.4,您可以对磁盘镜像本身进行签名(使用 codesign -s "Developer ID Application: [your company]" example.dmg),但是此创建的签名以附加到镜像文件的扩展属性的形式存储。实际上,它创建了三个 xattr,名为 com.apple.cs.CodeDirectory , com.apple.cs.CodeRequirements , 和 com.apple.cs.CodeSignature .要意识到的关键是这些属性是文件系统元数据——也就是说,它们附加到文件中,而不是文件内容的一部分。 HTTP 协议(protocol)对文件系统元数据的支持非常有限,因此当您通过 HTTP(或 FTP 或...)上传或下载时,它只会传输文件的内容,而 xattrs 会丢失。

您可以使用 ls -l@ 查看 xattrs命令(更详细的使用 xattr 命令):

$ ls -l@ example.dmg
-rw-r--r--@ 1 gordon staff 338590 Nov 13 2013 example.dmg
com.apple.cs.CodeDirectory 120
com.apple.cs.CodeRequirements 172
com.apple.cs.CodeSignature 8515
com.apple.diskimages.fsck 20
com.apple.diskimages.recentcksum 81

下载后,图像将丢失这些属性(并且可能从下载过程中获得 com.apple.quarantinecom.apple.metadata:kMDItemWhereFroms),因此不会被视为已签名。另一方面,其中包含的文件仍应正确签名(因为它们的签名是图像文件内容的一部分。)

从 OS X v10.11.5 开始, codesign支持将签名嵌入到磁盘镜像本身中,以便通过 HTTP 下载它。从 v10.12 开始,Gatekeeper 将对未签名磁盘镜像中的应用程序实现额外限制,这将阻止应用程序从磁盘镜像加载其他内容(主要是动态库),除非它们包含在应用程序本身中。如果您不知道这是否与您的应用程序相关,请继续对磁盘镜像进行签名(实际上,无论如何这是个好主意),但请务必运行 codesign低于 10.11.5 或更高版本,否则签名将不是有用的格式!

关于macos - OS X .dmg 签名在下载后丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com