1

设想:

在我们的 TeamCity 构建完成后,我有一个需要使用 TeamCity 签名的 .pkg 文件。

理想情况下,这可能是最后运行的构建步骤或脚本。经过研究,我尝试了以下方法:

脚本输入:

security import applicationkey.p12 -k login.keychain -P "password"

security import installerkey.p12 -k login.keychain -P "password"

security -v unlock-keychain -p "password" /Users/administrator/Library/Keychains/login.keychain

security -v unlock-keychain -u /Library/Keychains/System.keychain

productsign --keychain /Users/administrator/Library/Keychains/login.keychain --sign 'Developer ID Installer: Company LLC' CompanyInstaller.pkg CompanyInstallerSigned.pkg

pkgutil --check-signature CompanyInstallerSigned.pkg

输出:

unlock-keychain "-p" "mypassword" "/Users/administrator/Library/Keychains/login.keychain"

unlock-keychain "-u" "/Library/Keychains/System.keychain"

productsign: using timestamp authority for signature

productsign: signing product with identity "Developer ID Installer: Company LLC" from keychain /Users/administrator/Library/Keychains/login.keychain

productsign: adding certificate "Developer ID Certification Authority"

productsign: adding certificate "Apple Root CA"

2016-10-05 14:57:11.484 productsign[9385:29611120] SignData failed: CSSMERR_CSP_NO_USER_INTERACTION (-2147415840)

Error signing data.

productsign: error: Failed to sign the product.

问题:

我注意到许多解决方案都提到了在对话框提示中单击“始终允许”第一次出现时提到钥匙串的访问控制,但是我唯一已知的与此构建代理的交互是通过 SSH。有没有办法在 Teamcity mac 构建代理上使用 productsign 签署 .pkg,而无需与此“始终允许”提示进行 gui 交互?或者,有没有办法登录到构建代理并查看 gui,以便我可以单击“始终允许”来启用它?

注意:我还尝试将(本地签名机)私钥的访问控制保存为“允许所有应用程序访问此项目”,将其导出,将其导入构建代理的 login.keychain,然后再次尝试上述操作,仅有相同的输出。当我在我的 macbookpro 上执行相同的过程时,一切正常,但是我不记得我是否确实从很久以前单击过“始终允许”。

有什么想法吗?非常感激。

4

1 回答 1

1

我们也遇到了这个问题——我们正在使用 TeamCity 在 Mac 构建代理上签署包。

第一次设置构建代理时,我们将证书导入钥匙串并授予“始终允许”权限;这似乎奏效了。在某些时候,构建代理重新启动,然后签名包不再起作用,无论我们尝试使用权限和信任设置。我们不断收到SignData failed: CSSMERR_CSP_NO_USER_INTERACTION错误。

我们通过将证书移动到“系统”钥匙串(以前在“登录”钥匙串中)来解决这个问题(希望是好的!)。我们根本不需要改变我们的调用productsign——它正确地拾取了系统钥匙串。我想如果您在两个钥匙串中都有证书,那么您需要告诉productsign使用哪个钥匙串(--keychain ...)。

于 2017-01-16T15:45:08.953 回答