Как добавить авторизации в код подписи приложения из новой цепочки для ключей без участия человека - PullRequest
13 голосов
/ 05 октября 2010

Я пытаюсь автоматизировать процесс создания приложений для iphone с определенным сертификатом. Так что представьте, если разные пользователи загрузили свой сертификат в систему, и он сразу был доступен для подписи кода. Я хочу сделать это без какого-либо взаимодействия. Я также не хочу загромождать систему или входить в систему цепочкой ключей с различными пользовательскими сертификатами. Для этого у меня есть:

  • отключил требование в XCODE требовать подписи кода для сборки.
  • разработал скрипт ruby ​​для сборки приложения с помощью инструмента командной строки xcodebuild
  • создал скрипт для автоматического создания новой цепочки для ключей для пользователя моей системы
  • написал скрипт для кодирования подписи встроенного приложения для iphone.

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

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

entry 1:
    authorizations (6): decrypt derive export_clear export_wrapped mac sign
    don't-require-password
    description: privateKey
    applications (2):
        0: /usr/bin/codesign (OK)

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

security -v authorize -uew sign | / usr / bin / codesign [кодовые знаки, указывающие на приложение и конкретную цепочку для ключей]

У кого-нибудь есть идеи?

Ответы [ 6 ]

11 голосов
/ 25 марта 2011

Если вы импортируете свой сертификат в цепочку для ключей с -A, это позволит получить доступ ко всем программам, пытающимся запросить этот сертификат. Это не очень безопасно, но работает. Вы также можете использовать -T, чтобы ограничить его конкретным приложением. Посмотрите параметр импорта, найденный в man security.

4 голосов
/ 12 января 2012

Я хотел бы добавить сюда пул ответов, но также открыть часть вопроса, на который, я думаю, не было ответа.

Следующая команда импортирует идентификатор (сертификат + закрытый ключ) и указывает, что он должен «всегда разрешать» доступ к нему с помощью знака кода (не давая предупреждению Keychain Access выдвигать пользователя за нажатие кнопки):

`security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -T /usr/bin/codesign`

Эта команда разрешает доступ ко всем приложениям, а не просто знак кода:

security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -A

Любая из этих команд будет заботиться о диалоговых окнах, которые появляются каждый раз, когда вы используетезакрытый ключ в вашей цепочке для ключей.ОДНАКО, они НЕ позаботятся о подобном предупреждении, которое появляется при первом обращении за разрешением на использование закрытого ключа.Это предупреждение появится при первом использовании и попросит вас выбрать всегда разрешать, запрещать или разрешать.Каждый раз после этого (если вы используете опции -T или -A выше, предполагая, что ключ остается в вашей цепочке для ключей), вы не увидите диалоговое окно.

Мой вопрос: как вы можете устранить предупреждение, которое появляется при первом использовании?

Я рассмотрел использование Apple Script для автоматизации нажатия кнопки всегда разрешать, но поскольку предупреждение вызывается всередина команды xcodebuild Я не уверен, что это сработает.Любая помощь будет высоко ценится!

4 голосов
/ 16 января 2011

В моей системе, когда брелок разблокирован с помощью

ключ разблокировки безопасности

Я просто позволил xcodebuild выполнять сборку и подписывание кода.

Если ваши брелки разблокированы, в этом нет необходимости использовать вышеуказанный вызов.

Вы также можете проверить команду execute-with-privileges безопасности.

2 голосов
/ 26 января 2016

Просто добавьте ко всем ответам выше: даже если ваш ключ / сертификат не защищен паролем, вам нужно передать -P "" (пустой пароль) на security import.

1 голос
/ 09 октября 2012

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

#!/usr/bin/osascript
tell application "System Events"
  tell window 1 of process "SecurityAgent"
    click button "Always Allow" of group 1
  end tell
end tell

codesign wants to use key

1 голос
/ 21 октября 2011

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

...