能一次性看清签名是否存在、是否有效、是否公证、证书是否可信——通过codesign、xattr、spctl等系统命令组合验证:1. codesign -dv查看authority、teamidentifier、valid on disk和notarized;2. xattr检查quarantine票据;3. spctl --assess确认公证状态;4. security命令验证证书链可信性。
直接用终端命令组合检查,能一次性看清签名是否存在、是否有效、是否公证、证书是否可信——不需要第三方工具,全靠系统自带命令。
一、确认安装包是否已签名并查看签名详情
运行以下命令(把 /path/to/YourApp.pkg 替换为实际路径):
codesign -dv --verbose=4 "/path/to/YourApp.pkg"
重点看这几项输出:
- Authority:应显示类似 Developer ID Installer: XXX Inc.;若为 adhoc、unidentified developer 或为空,说明签名无效或缺失
- TeamIdentifier:必须是非空字符串(如 ABC123XYZ),为空表示未用合法开发者证书签名
- valid on disk:值为 yes 表示文件未被篡改;no 表示签名已损坏或内容被修改
- Notarized:显示 yes 表示已通过苹果公证;无此字段或为 no,则 macOS Ventura 及更新版本可能阻止运行
二、检查是否附带苹果公证票据
公证票据以扩展属性形式存在,执行:
xattr -pl com.apple.quarantine "/path/to/YourApp.pkg"
若输出中含 ticket=1,说明系统曾成功获取并缓存过公证信息;若报错 No such xattr 或显示 ticket=0,表明未公证或票据已失效。
进一步验证公证有效性:
spctl --assess --type install --verbose=4 "/path/to/YourApp.pkg"
输出含 accepted 才代表签名+公证均通过;若为 rejected、invalid 或提示 source=Unnotarized,说明未通过苹果安全审查。
三、验证证书链是否完整可信
签名有效 ≠ 证书可信。需确认证书未过期、未被吊销,且可上溯至苹果信任根:
codesign --display --requirements - "/path/to/YourApp.pkg"
记录输出中的 designated requirement 字符串,它定义了系统接受该安装包所需的全部签名条件。
再运行:
security find-certificate -p -p /Library/Keychains/System.keychain | openssl x509 -noout -text 2>/dev/null | grep -A1 "Validity\|Subject\|Issuer"
结合 codesign -dv 输出的 Authority 和有效期,比对证书的 Not Valid Before/After 时间段是否覆盖当前系统时间(2026年5月1日)。时间偏差会导致验证失败。
四、快速综合判断(一行命令收尾)
把关键验证合并成一条命令,便于快速筛查:
echo "== 签名状态 =="; codesign -dv --verbose=2 "/path/to/YourApp.pkg" 2>/dev/null | grep -E "(Authority|TeamIdentifier|valid on disk|Notarized)"; echo -e "\n== 公证状态 =="; spctl --assess --type install --verbose=2 "/path/to/YourApp.pkg" 2>/dev/null; echo -e "\n== 票据存在性 =="; xattr -l "/path/to/YourApp.pkg" 2>/dev/null | grep quarantine
输出结果清晰分块,一眼识别哪一环出问题:签名缺失、证书异常、未公证、或票据丢失。











