Как добавить авторизацию для кодового обозначения приложения из новой связки ключей без какого-либо взаимодействия с человеком
Я пытаюсь автоматизировать процесс создания приложений iphone с определенным сертификатом. Представьте себе, если разные пользователи загрузили свой сертификат в систему, и он был немедленно доступен для кодового знака. Я хочу сделать это без какого-либо взаимодействия. Я также не хочу загромождать систему или logon keychain с разными сертификатами пользователей. Для этого я:
- отключил требование в XCODE, чтобы требовать подписи кода для сборки a.
- разработал ruby script для создания приложения с помощью инструмента командной строки xcodebuild
- создал script, чтобы автоматически создать новую цепочку ключей для пользователя моей системы.
- написал script, чтобы ввести код встроенного приложения iphone.
Все работает, но мне нужно вручную нажать enter, когда программа codeign пытается реализовать разрешение знака. Мои брелки разблокированы. Как ни странно, это работает, если я делаю брелок связью по умолчанию, но это не масштабируется, т.е. Я мог бы иметь только один процесс сборки в любой момент времени.
Когда я вручную кликаю всегда, разрешаю этот процесс, я получаю запись в моем дампе keychain, который выглядит так:
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)
Итак, я думаю, что мне нужно использовать команду authorize в безопасности, чтобы предварительно авторизовать код для этих разрешений. Страница безопасности очень бедна. Я не могу заставить его работать с помощью таких команд:
security -v authorize -wew sign |/usr/bin/codesign [код знака vars, указывающий на приложение и конкретную цепочку ключей]
Есть ли у кого-нибудь идеи?
Ответы
Ответ 1
Если вы импортируете свой сертификат в свою цепочку ключей с помощью -A, это позволит получить доступ ко всем программам, пытающимся запросить этот сертификат. Это не очень безопасно, но работает. Вы также можете использовать -T, чтобы ограничить его определенным приложением. Посмотрите параметр импорта, найденный в безопасности человека.
Ответ 2
В моей системе, когда цепочка ключей разблокирована с помощью
защитная разблокировка-цепочка ключей
Я просто позволю xcodebuild выполнять как сборку, так и подписание кода.
Если ваши keychins разблокированы, это не обязательно
для использования вышеуказанного вызова.
Вы также можете проверить команду execute-with-privileges
безопасности.
Ответ 3
Я хотел бы добавить в пул ответов здесь, но и снова открыть часть вопроса, на который, как я думаю, не ответил.
Следующая команда импортирует идентификатор (cert + private key) и указывает, что он должен "всегда разрешать" доступ кодового знака к нему (предотвращение предупреждения 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
Просто добавьте все ответы выше: даже если ваш ключ/сертификат не защищен паролем, вам необходимо передать -P ""
(пустой пароль) на security import
.
Ответ 5
Копирование сертификатов из брелка для входа в системную цепочку ключей прекрасно работает в моем случае, и в результате вам не нужно делать разблокировку командной строки.
Ответ 6
Что касается диалогов, которые появляются каждый раз, когда вы используете закрытый ключ в своей цепочке ключей, это яблоко script будет заботиться о аналогичном предупреждении, которое появляется в первый раз, когда вы запрашиваете разрешение на использование закрытого ключа.
#!/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]()