You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mac命令行脚本中授权codesign信任导入的钥匙串

解决Mac构建脚本中codesign钥匙串授权问题

问题背景

我正在为产品创建可在任意Mac上运行的标准化构建脚本,已将所有分发证书导出为p12文件存储在仓库中,并使用以下命令导入钥匙串:

echo "Attaching External Keychain"
/usr/bin/openssl pkcs12 -in Distribution-Keys.p12 -nokeys -passin pass:<PASSWORD> | /usr/bin/openssl x509 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space

echo "Creating external Keychain"
security create-keychain -p <PASSWORD> Distribution-Keys.keychain

echo "Changing access to external Keychain"
security set-keychain-settings -lut 21600 Distribution-Keys.keychain

echo "Unlocking external Keychain"
security unlock-keychain -p <PASSWORD> Distribution-Keys.keychain

echo "Importing external Keychain from p12 file"
security import Distribution-Keys.p12 -P <PASSWORD> -A -t cert -f pkcs12 -k Distribution-Keys.keychain


security list-keychain -d user

echo "Adding new keychain to search path"
security list-keychain -d user -s Distribution-Keys.keychain /Users/support/Library/Keychains/login.keychain-db

security list-keychain -d user

但遇到两个问题:

  • 本地终端运行脚本时,会弹出窗口要求输入密码以允许codesign访问钥匙串中的'Distribution-Keys'密钥
  • 通过SSH运行脚本时,出现“codesign退出码3”错误

需要通过命令行在脚本中完成信任授权,避免弹窗和报错。


命令行授权解决方案

1. 设置钥匙串分区权限(核心步骤)

导入证书后,必须给codesign等工具授予访问密钥的权限,直接运行以下命令:

# 给钥匙串中的密钥添加codesign等工具的访问权限
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k <PASSWORD> Distribution-Keys.keychain

说明:-S指定允许访问的服务范围,覆盖Xcode工具和签名工具;-s表示针对密钥设置权限;-k后跟你的钥匙串密码。

2. 配置证书信任级别

确保分发证书被系统信任,避免签名时验证失败:

# 从p12文件中提取证书并添加为信任根证书
security add-trusted-cert -d -r trustRoot -k Distribution-Keys.keychain <(openssl x509 -in Distribution-Keys.p12 -nokeys -passin pass:<PASSWORD>)

3. SSH环境适配

SSH会话中需要确保钥匙串始终处于解锁状态,在脚本开头或签名操作前添加:

# 强制解锁钥匙串(避免SSH会话中钥匙串锁定)
security unlock-keychain -p <PASSWORD> Distribution-Keys.keychain
# 确保钥匙串在搜索路径首位
security list-keychain -d user -s Distribution-Keys.keychain /Users/support/Library/Keychains/login.keychain-db

整合到原脚本

把上述授权命令添加到原脚本的security import步骤之后,完整的补充部分如下:

# ...原脚本中导入证书的命令...

echo "Granting codesign access to keychain keys"
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k <PASSWORD> Distribution-Keys.keychain

echo "Marking distribution certificate as trusted"
security add-trusted-cert -d -r trustRoot -k Distribution-Keys.keychain <(openssl x509 -in Distribution-Keys.p12 -nokeys -passin pass:<PASSWORD>)

# ...后续脚本步骤...

内容的提问来源于stack exchange,提问作者canderse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:25:25