如何在Mac上使用扩展验证代码签名证书进行代码签名
在Mac上使用Sectigo硬件令牌完成EV代码签名(解决信任链问题)
核心解决方案(针对unable to build chain to self-signed root错误)
1. 确保硬件令牌被Mac识别
首先安装对应硬件令牌的Mac驱动:
- 下载并安装SafeNet Authentication Client for Mac(匹配你的令牌型号),插入令牌后打开「钥匙串访问」,切换到「智能卡」类别,应能看到你的EV代码签名证书。
2. 修复证书信任链
错误的根源是Sectigo根证书未被Mac系统信任,或证书链不完整:
- 打开钥匙串访问,找到硬件令牌中的EV证书,右键选择「显示简介」查看证书路径。如果根证书(如
Sectigo Public Code Signing Root R46)不在「系统根证书」密钥链中:- 提取或获取Sectigo官方根证书
- 将其导入「系统」密钥链,右键证书选「显示简介」,在「信任」选项卡设置「使用此证书时:始终信任」
- 确认中级证书(如
Sectigo EV Code Signing CA R36)已存在,硬件令牌通常会包含该证书,若缺失需手动导入。
3. 获取正确的签名身份
避免使用易重复的公司名称,用命令列出所有可用的代码签名身份:
security find-identity -p codesigning
输出示例:
1) A1B2C3D4E5F6... "Your Company, Inc. EV Code Signing" Valid identities only
复制对应的十六进制指纹,或唯一的证书名称。
4. 执行标准签名命令
结合时间戳、哈希算法和Mac公证要求,运行以下命令:
codesign -s "A1B2C3D4E5F6..." --timestamp=http://timestamp.sectigo.com --options runtime --digest-algorithm SHA256 "/path/to/yourApp.app"
参数说明:
-s:指定签名身份(指纹或唯一名称)--timestamp:绑定Sectigo时间戳,确保签名长期有效--options runtime:启用Hardened Runtime,满足Mac应用公证的强制要求--digest-algorithm SHA256:和Windows端保持一致的哈希算法
执行后,系统会弹出窗口要求输入硬件令牌的PIN码,输入正确即可完成签名。
5. 验证签名有效性
用以下命令检查签名是否合规:
codesign -dv --verbose=4 "/path/to/yourApp.app"
重点查看Authority字段是否显示完整证书链(EV证书→中级证书→根证书),以及Timestamp字段是否存在有效时间戳。
内容的提问来源于stack exchange,提问作者Shoji Urashita
相关产品推荐
相关产品推荐

