下载后OS X .dmg签名丢失

 三星anycall 发布于 2023-01-12 14:51

我正在签署一个.dmg包含.app有效开发者ID配置文件的人.一切都签署,包括框架.当我运行时codesign -dvvv,会显示正确的证书satisfies its Designated Requirement.应用运行正常.

但是,当我上传和下载时.dmg,签名"消失".当我跑步时codesign -dvvv,它说code object is not signed at all.并且GateKeeper自然拒绝运行该应用程序.

注意:这听起来很像这个问题,但我肯定会使用正确的开发者身份证书签名,并且.dmg不会出现"损坏".

1 个回答
  • [注意:OS X v10.11.5和v10.12中的情况发生了显着变化; 这个答案已经更新,以反映这一点.]

    通常,您真正需要签名的是磁盘映像内的文件(主要是应用程序),而不是映像本身.下载图像后,将在使用时检查各个项目上的签名.从OS X 10.11.5开始,对磁盘映像的签名得到了适当的支持,有时也是必需的,但除了在其中签署相关项目之外,还需要对其进行签名.

    通过OS X v10.11.4,您可以对磁盘映像本身codesign -s "Developer ID Application: [your company]" example.dmg进行签名(使用),但是创建的签名以附加到映像文件的扩展属性的形式存储.实际上,它创建三个xattrs,命名com.apple.cs.CodeDirectory,com.apple.cs.CodeRequirementscom.apple.cs.CodeSignature.要实现的关键是这些属性是文件系统元数据 - 也就是说,它们附加到文件,而不是文件内容的一部分.HTTP协议对文件系统元数据的支持非常有限,因此当您通过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开始,网守将对未签名磁盘映像中的应用程序强制执行其他限制,这些限制将阻止应用程序从磁盘映像加载其他内容(主要是动态库),除非它们包含在应用程序本身中.如果您不知道这是否与您的应用程序相关,请继续签署磁盘映像(实际上,无论如何都是个好主意),但请务必codesign在10.11.5或更高版本下运行,否则签名将不会出现在有用的格式!

    2023-01-12 14:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有