能否使用Azure Key Vaults为macOS平台Electron应用进行代码签名?
Azure Key Vaults 用于 macOS Electron 应用代码签名方案
针对你的场景,以下是三个可行的落地方案,均满足证书存储在Azure Key Vaults的合规要求,同时支持macOS(Intel/M1双架构)Electron应用签名:
方案1:内存级证书导出+临时钥匙串签名
通过Azure CLI将证书导出到内存(或临时磁盘文件,签名后立即删除),导入macOS临时钥匙串供Xcode/electron-forge调用,避免证书长期留存本地:
- 配置Jenkins节点的Azure权限:给执行构建的服务主体分配Key Vault的
Certificate Get和Secret Get权限 - 执行签名流程:
- 导出证书到临时文件(可优化为内存管道避免磁盘写入):
az keyvault secret download --vault-name YOUR_VAULT_NAME --name YOUR_CERT_NAME --file - --encoding base64 | base64 -D > /tmp/temp-cert.p12 - 创建并解锁临时钥匙串:
security create-keychain -p YOUR_TEMP_PASS /tmp/signing.keychain security unlock-keychain -p YOUR_TEMP_PASS /tmp/signing.keychain - 导入证书并授权签名工具访问:
security import /tmp/temp-cert.p12 -k /tmp/signing.keychain -P YOUR_CERT_PASS -T /usr/bin/codesign -T /usr/bin/productbuild security list-keychains -s /tmp/signing.keychain login.keychain - 执行Electron构建签名:
electron-forge make --platform darwin --arch x64,arm64 - 清理临时资源(必须执行,确保合规):
security delete-keychain /tmp/signing.keychain && rm -f /tmp/temp-cert.p12
- 导出证书到临时文件(可优化为内存管道避免磁盘写入):
方案2:第三方签名服务对接Azure Key Vault
使用支持macOS和Azure Key Vault集成的专业签名工具,无需本地处理证书:
- 选择工具:比如SignServer、DigiCert ONE Signing Manager,这类工具提供REST API/CLI,可直接从Azure Key Vault拉取证书完成签名
- 流程:
- 部署第三方签名服务,配置Azure Key Vault作为证书存储源,完成权限映射
- 在Jenkins构建流程中,调用工具CLI/API,传入待签名的Electron包路径、Key Vault证书ID等参数
- 签名完成后,继续执行
electron-forge publish上传到Nucleus
方案3:自定义electron-forge签名钩子
扩展electron-forge的签名逻辑,通过Azure SDK直接调用签名,绕开Xcode本地证书依赖:
- 修改electron-forge配置文件,添加
afterPack钩子:- 使用Azure Key Vault Node.js SDK获取证书的私钥和公钥
- 调用macOS原生
codesign命令,通过证书指纹指定签名身份,同时利用SDK的签名能力完成签名操作 - 分别处理x64和arm64架构的包,确保双构建都完成签名
关键注意事项
- 所有涉及证书导出的操作,必须确保证书不持久化存储(优先用内存管道,临时文件需立即删除),符合云HSM合规要求
- Jenkins节点需配置Azure AD服务主体,确保能安全访问Key Vault
- 双架构构建时,可通过
--arch x64,arm64参数让electron-forge自动处理,或分别构建签名后合并为universal包
内容的提问来源于stack exchange,提问作者Giorgio Catenacci
相关产品推荐
相关产品推荐

