2016-10-05 126 views
1

場景:Teamcity:Mac構建代理無法使用productsign對.pkg文件進行簽名。 SignData失敗:CSSMERR_CSP_NO_USER_INTERACTION(-2147415840)

我有一個需要使用的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 

OUTPUT:

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. 

問題:

我發現很多的解決方案,這提到點擊t的「始終允許」他會在第一次參照Keychain的訪問控制時出現對話框,但是我與該構建代理的唯一已知交互是通過SSH。 是否有一種方法可以使用Teamcity mac build agent上的productsign簽署.pkg,而無需與此「始終允許」提示進行交互?或者,有沒有辦法登錄到構建代理並查看gui,所以我可以點擊這個「始終允許」來啓用它?

注:我也試過保存(本地簽名機)的私鑰的訪問控制「允許所有應用程序訪問此項目」,出口,它導入到生成代理的login.keychain,然後再次嘗試以上,只有相同的輸出。當我在我的macbookpro上執行同樣的過程時,一切正常,但我不記得我是否從很久以前點擊「始終允許」。

有什麼想法?非常感激。

回答

1

我們遇到了這個問題 - 我們使用TeamCity在Mac構建代理上簽名包。

我們第一次設置構建代理時,我們將證書導入鑰匙串並授予「始終允許」權限;這似乎工作。在某個時候,構建代理重新啓動,然後簽名包不再有效,無論我們通過授權&信任設置嘗試。我們不斷收到SignData failed: CSSMERR_CSP_NO_USER_INTERACTION錯誤。

我們通過將證書移動到'系統'鑰匙串(它以前在'登錄')鑰匙串中來解決這個問題(希望很好!)。我們根本不需要將呼叫改爲productsign - 它正確地獲取了系統鑰匙串。我想如果你在兩個鑰匙串中都有證書,那麼你需要告訴productsign使用哪個鑰匙串(--keychain ...)。

相關問題