情境:
我的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.
问题:
我注意到有很多解决方法可以点击"始终允许"第一次出现在Keychain访问控制的引用中时,从对话框提示开始,但我与该构建代理的唯一已知交互是通过SSH。 是否有办法在Teamcity mac build代理上使用productsign签署.pkg而无需与此进行gui交互"始终允许"提示?或者,有没有办法登录到构建代理并查看gui所以我可以点击这个" Always Allow"启用此功能?
注意:我还尝试将(本地签名机)私钥的访问控制保存到"允许所有应用程序访问此项",导出它,将其导入构建代理程序的login.keychain,然后再次尝试上面的操作,只有相同的输出。当我在我的macbookpro上执行相同的过程时,一切正常,但是我不记得我是否点击过" Alway Allow"从很久以前。
有什么想法?非常感谢。
答案 0 :(得分:1)
我们也遇到了这个问题 - 我们正在使用TeamCity在Mac构建代理上签名包。
我们第一次设置构建代理时,我们将证书导入到钥匙串中并授予“始终允许”权限;这似乎有效。在某些时候,构建代理程序重新启动,然后签署程序包不再有效,无论我们如何尝试使用权限&信任设置。我们不断收到SignData failed: CSSMERR_CSP_NO_USER_INTERACTION
错误。
我们通过将证书移动到“系统”钥匙串(之前在“登录”中)钥匙串来修复此问题(希望是好的!)。我们根本不需要将呼叫更改为productsign
- 它正确地选择了系统密钥链。我想如果你在两个钥匙串中都有证书,那么你需要告诉productsign
使用哪个钥匙串(--keychain ...
)。