【发布时间】:2017-02-13 13:55:56
【问题描述】:
从 macOS Sierra 开始,在使用此身份时,如果没有 usr/bin/codesign UI 提示进行访问,我将无法再将 codesign-identity 导入带有 /usr/bin/security 的钥匙串。这破坏了构建服务器的打包脚本。似乎没有解决方法。这会影响自定义创建的钥匙串,但也会影响 login.keychain。
复制步骤: 在终端中执行以下命令(需要签名身份才能导入):
security create-keychain -p test buildagent.keychain
security unlock-keychain -p test buildagent.keychain
security list-keychains -d user -s buildagent.keychain
security default-keychain -s buildagent.keychain
security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign
codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'
结果:macOS 显示一个 UI 提示,要求获得访问之前导入的私钥的权限。
我尝试了很多解决方法,但似乎没有任何效果:
- 在指定钥匙串名称时使用新的 .keychain-db 扩展名
- 使用 login.keychain 而不是自定义的
- 使用 -A 导入 p12 ('允许任何应用程序访问 导入的密钥')
- 单独导入证书和密钥(正在提取 从 p12 之前使用 openssl pkcs12)
导入身份确实有效,在 Keychain Access 应用程序中显示钥匙串的内容时,我可以看到证书和密钥。私钥的访问控制设置也已正确配置(使用所需的协同设计例外规则)。
如何避免 Sierra 的 UI 提示?
【问题讨论】:
-
目前我发现我必须打开一次 UI 并单击
Always allow然后 CLI 运行良好。 -
嗨 jayatubi,如果您只使用几个 Codesign 身份和相同的钥匙串(例如 login.keychain),这是一个可行的解决方案。但是我的公司必须管理数十种不同的 Codesign 身份,并且更喜欢使用每个构建的钥匙串,因为这消除了在同一个钥匙串中提供多个名称相似的身份时破坏构建的风险。
-
我注意到一件奇怪的事情。当 UI 提示时,它会询问
permission of private XXX。但是,XXX不是私钥的名称,而是p12文件的名称。如果我在同一个 p12 文件中有多个键,无论我使用哪个键,它总是显示 p12 文件的名称。如果我点击always allow相同 p12 中的所有键都可以进行协同设计。 -
就我而言,问题是我是通过 SSH 进行的
标签: ios macos keychain codesign macos-sierra