codesign 在哪里存储 OSX 上已签名文本文件的签名?

Posted

技术标签:

【中文标题】codesign 在哪里存储 OSX 上已签名文本文件的签名?【英文标题】:Where does codesign store the signature for a signed text file on OSX? 【发布时间】:2016-01-26 11:39:39 【问题描述】:

我有一个简单的应用程序包,其结构如下:

myapp.app/Contents/
myapp.app/Contents/MacOS/myapp
myapp.app/Contents/Resources/empty.lproj
myapp.app/Contents/Info.plist
myapp.app/Contents/PkgInfo

如果我执行

codesign -s "Developer ID" myapp.app/Contents/Info.plist

我可以检查文件是否已签名

codesign -d -v myapp.app/Contents/Info.plist

给出以下输出

Executable=/pathToApp/quicknanobrowser.app/Contents/Info.plist
Identifier=Info
Format=generic
CodeDirectory v=20100 size=113 flags=0x0(none) hashes=1+2 location=embedded
Signature size=1278
Signed Time=26 Jan 2016 12:31:24
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=80

文件签名的数据存储在哪里?文件夹结构没有改变(没有新文件),文件的大小没有改变。它是否存储在某些文件系统特定的元数据中?是否可以访问/读取此元数据?

【问题讨论】:

【参考方案1】:

对于非 mach-o 二进制文件,codesign 将签名存储在每个文件的元数据中,称为 HFS+ 扩展属性:

ls -l@ Info.plist

com.apple.cs.CodeDirectory  142 
com.apple.cs.CodeRequirements   180 
com.apple.cs.CodeSignature  8551 

你可以通过xattr查看这些属性的内容

xattr -p com.apple.cs.CodeSignature Info.plist

但该工具似乎喜欢以十六进制转储。似乎没有用于访问属性的 shell 简写,尽管您过去可以通过将 /rsrc 附加到文件名(例如 cat blah/rsrc)来获取资源叉(也是扩展属性)。

【讨论】:

以上是关于codesign 在哪里存储 OSX 上已签名文本文件的签名?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 签名失败命令 /usr/bin/codesign 失败,退出代码为 1

WWDC2016-session401-CodeSign大改版

其他xcode iphone项目成功签名后,codesign才成功

驱动程序/代码签名

OSX:在哪里存储应用程序的 SQLite 文件?

CodeSign 错误:SDK“iOS 5.1”中的产品类型“应用程序”需要代码签名