如何在macOS上验证应用签名证书并获取其SHA-1指纹?
确认macOS代码签名证书的SHA-1指纹
首先明确:你看到的CandidateCDHash sha1=bd26fd2d0111be2464bad4500330252cd4779623不是代码签名证书的SHA-1指纹。
为什么CandidateCDHash不是证书指纹?
CandidateCDHash是代码签名中「代码目录(Code Directory)」的SHA-1哈希值,它用于验证代码本身的完整性,和签名证书的指纹完全无关。
获取代码签名证书SHA-1指纹的正确方法
方法1:提取证书文件后解析
- 从目标文件中提取签名证书链:
codesign -dvvv --extract-certificates /path/to/your/target/file
执行后会在当前目录生成cert0、cert1等证书文件(cert0通常是直接签名的叶证书)。
- 解析证书文件获取SHA-1指纹:
security find-certificate -p -a cert0 | openssl x509 -fingerprint -sha1 -noout
输出格式类似:SHA1 Fingerprint=XX:XX:XX:...,这就是证书的SHA-1指纹。
方法2:直接从codesign输出提取证书信息
执行以下命令查看签名的证书链详情,从中定位证书指纹:
codesign -dv --verbose=4 /path/to/your/target/file 2>&1
在输出中找到Authority开头的字段,对应证书链中的各个证书。可以结合security命令验证这些证书的指纹,比如针对某个证书名称:
security find-certificate -c "证书名称" -Z | grep SHA-1
补充:产品签名与代码签名的差异
产品签名(productsign)的安装包用pkgutil --check-signature能直接看到证书指纹,是因为pkg包结构中直接嵌入了完整的证书链及指纹信息;而代码签名的codesign命令默认输出更侧重代码完整性验证相关的哈希,而非证书本身的指纹。
内容的提问来源于stack exchange,提问作者fhcat
相关产品推荐
相关产品推荐

