2010-10-05 4 views
13

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

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

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

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

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 -wew sign |/usr/bin/codesign [код знака, указывающий на приложение и конкретную цепочку ключей)

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

ответ

4

В моей системе, как только брелок разблокирован с

безопасности отпирания-брелка

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

Если ваши блокировки клавиатуры разблокированы, для использования вышеуказанного вызова не обязательно .

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

+1

защитная разблокировка -p

+0

Я разблокировал брелок все время. Я обнаружил, что если я сначала займусь xcode и сделаю одну сборку, все сборки после этого, похоже, будут работать даже на других связках ключей. Итак, теперь я: 1. создайте новый брелок (у меня есть несколько пользователей, поэтому его слишком сложно управлять всем в одной брелка) 2. установите его как брелок по умолчанию 3. разблокируйте его. 4. Постройте через сборку xcode с подписью кода и сертификатом, установленным через файл xcconfig. Это не отличное решение b/c его боль, чтобы настроить новые серверы. Я изучу исполнение с приютами больше, но я считаю, что документация по безопасности ужасна. – cmos

11

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

+0

Это сработало отлично, особенно в моей ситуации, когда сертификаты все время меняются для разных клиентов. –

+0

Если бы я мог голосовать за вас 10 раз, я бы! Я не думал о возвращении к стадии импорта, когда сработал этап кода. Спасибо! –

1

Копирование сертификатов из ключевого слова Login в системный keychain прекрасно работает в моем случае, и в результате вам не нужно разблокировать какую-либо команду.

4

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

Следующая команда импортирует удостоверение (сертификат + ключ) и определяет, что он должен «всегда разрешать» доступ код знака к нему (предотвращение предупреждение 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

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

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

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

+1

Возможно, я нашел ответ на этот вопрос: http://scottkle.in/clicking-always-allow-via-applescript-for-cod –

+0

Ссылка не работает. Он был перемещен здесь: http://www.scottkle.in/clicking-always-allow-via-applescript-for-codesign-authorization-and-certificate-acl – Sirio

+0

@AlfieHanssen ссылка не работает, можете ли вы опубликовать решение здесь пожалуйста? –

1

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

#!/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

+0

Это довольно длинный вызов, а не просто добавление закрытого ключа с возможностью, позволяющей использовать код. Да, частный ключ, а не сертификат, как предполагает gui. – Sojurn

2

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

Смежные вопросы