Teamcity: агент сборки Mac не может подписать файл.pkg с помощью productsign. Ошибка SignData: CSSMERR_CSP_NO_USER_INTERACTION (-2147415840)

Сценарий:

У меня есть файл.pkg, который должен быть подписан с помощью TeamCity после завершения нашей сборки TeamCity.

В идеале это может быть этап сборки или сценарий, который выполняется в конце. После исследования я попробовал следующее:

Сценарий ВВОДА:

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. Есть ли способ подписать файл.pkg с помощью productsign на агенте сборки Teamcity mac без взаимодействия с графическим интерфейсом с помощью приглашения "Всегда разрешать"? Или есть способ войти в агент сборки и просмотреть графический интерфейс, чтобы я мог нажать на "Всегда разрешать", чтобы включить это?

Примечание. Я также попытался сохранить элемент управления доступом (локального подписывающего компьютера) в "Разрешить всем приложениям доступ к этому элементу", экспортировал его, импортировал его в login.keychain агента сборки, затем повторил попытку выше, чтобы только имеют одинаковый выход. Когда я выполняю тот же процесс на моем macbookpro, все работает, однако я не помню, нажимал ли я "Alway Allow" давным-давно.

Какие-нибудь мысли? Очень признателен.

2 ответа

Мы также столкнулись с этой проблемой - мы используем TeamCity для подписи пакетов на агенте сборки Mac.

В первый раз, когда мы настроили агент сборки, мы импортировали сертификат в цепочку для ключей и дали разрешение "всегда разрешать"; казалось, это сработало. В какой-то момент агент сборки был перезагружен, а затем подписывание пакетов больше не работало, что бы мы ни пытались с настройками разрешений и доверия. Мы продолжали получать SignData failed: CSSMERR_CSP_NO_USER_INTERACTION ошибка.

Мы исправили это (надеюсь, навсегда!), Переместив сертификат в цепочку ключей "Система" (ранее она была в цепочке ключей "Логин"). Нам не нужно было менять наш звонок на productsign на всех - правильно подобрал системный брелок. Я полагаю, что если у вас есть сертификат в обеих цепочках для ключей, то вам нужно будет сказать productsign какой брелок использовать (--keychain ...).

Когда вы входите в систему, вы используете сертификат установщика идентификатора разработчика и обычно предполагает, что у него нет доступа к закрытому ключу для подписи, где происходит сбой с этой ошибкой.

Чтобы исправить это, перейдите

Доступ к связке ключей-> Нажмите на маленькую треугольную стрелку (>) перед сертификатом «Установщик идентификатора разработчика» под связкой ключей для входа или соответствующей связкой ключей. Дважды щелкните закрытый ключ. Щелкните вкладку «Контроль доступа». Выберите «Разрешить всем приложениям доступ к этому элементу». Теперь попробуйте еще раз войти в продукт из командной строки, все должно работать.

Другие вопросы по тегам