Невозможно импортировать общедоступные или закрытые ключи подписи кода с использованием доступа к Keychain (Mac OS X Mavericks)
В попытке построить проект iOS (в XCode) мне нужно импортировать общедоступные и закрытые ключи моего коллеги для идентификации подписи кода, но я не могу этого сделать, потому что я получаю сообщение об ошибке в Keychain Access, в котором говорится: Произошла ошибка. Не удалось импортировать элемент./Содержимое этого элемента невозможно получить "
ПОЛНЫЕ ДЕТАЛИ:
У меня есть два ключа от моего компьютера коллеги, вывез их из его Keychain в виде двух файлов:
Roomer Inc.p12 (закрытый ключ)
Roomer Inc.pem(открытый ключ)
Когда он экспортировал их, он оставил пароль пустым (хотя мы также пробовали с паролем "тест" и получили те же результаты).
Когда я дважды щелкните Roomer Inc.p12 (для закрытого ключа), он откроется в Keychain Access и предложит мне выбрать брелок (по умолчанию выбран "login" )
Я нажимаю "Добавить", а затем мне будет предложено ввести пароль в цепочку ключей (я оставляю пустой)
Далее я всегда вижу это сообщение в доступе к Keychain:
![screenshot of error]()
Однако, несмотря на появление этого сообщения, когда я нажимаю "ОК", я вижу новую личную запись для "Roomer Inc". Обратите внимание, что эта запись является закрытым ключом в цепочке ключей входа в систему, как и следовало ожидать, но не имеет срока действия (если она?)
Далее, для файла Roomer Inc.pem(открытый ключ) меня попросят выбрать keychain ( "login" ), и я нажимаю "Добавить"
Затем я также получаю сообщение "Произошла ошибка. Не удалось импортировать элемент./Содержимое этого элемента не может быть получено" для открытого ключа. Однако в этом случае (в отличие от частного ключа) я не вижу записи, соответствующей тому, что я только что добавил.
Итак, кажется, что запись в закрытом ключе может быть или не быть ОК (у меня нет возможности проверить), а запись открытого ключа для Roomer не может быть установлена в цепочке ключей без этого сообщения об ошибке. Обратите внимание, что я также попытался использовать команду импорта безопасности для импорта открытого ключа:
$security import Roomer\Inc.pem -f pkcs12 ~/Library/Keychains/login.keychain
1 импортированный ключ.
Когда я это делаю, хотя команда возвращает "1 ключ импортирован", я не вижу открытого ключа для "Roomer Inc" в окне "Доступ к Keychain" (я закрыл доступ к Keychain Access и снова открыл его).
В любом случае мы определили, что это наш блокатор. (Симптомом, конечно же, является то, что проект XCode не будет создан для профиля предоставления AdHoc, который будет использоваться с TestFlight). Я остановился на дополнительных шагах по установке XCode и настройке TestFlight, потому что мы считаем, что основная проблема связана с импортом ключей, как описано выше.
Ответы
Ответ 1
Мы выяснили нашу проблему, и я отправляю свой ответ здесь, чтобы другие могли найти это полезным.
Проблема - это проблема UX с Keychain Access. Позвольте мне создать резервную копию и дать небольшой контекст: когда вы создаете сертификат распространения с Apple, вы создаете его на основе разрешений PRIVATE KEY и App.
В Keychain Access сертификат распространения указан как дочерний элемент под именем закрытого ключа, из которого он был создан. Вот улов: когда вы используете окно поиска в доступе Keychain (в моем случае мы вводили "Roomer" , потому что это имя в нашем сертификате распространения), он не будет искать сертификат с этим именем, он будет искать сертификат, прикрепленный к закрытому ключу для этого имени.
Итак, мой коллега создал сертификат распространения на основе частного ключа, который был назван "Jorge Davila" (его имя), хотя сертификат распространения был назван "iPhone Distribution: Roomer Inc".
Когда он искал "Roomer" в Keychain Access, правильный результат не отображался в результатах поиска, потому что ключ, созданный этим сертификатом, был назван "Jorge Davila", а не "Roomer" . Таким образом, он экспортировал неправильный сертификат и не понимал, потому что были другие (некоторые истекли) с этим именем.
Вот как выглядит правильный:
![]()
Это относительно тонкая проблема с UX Keychain Access и тот факт, что инструмент поиска не дает вам ожидаемых результатов. Я отправляю этот ответ в надежде, что другие могут оказаться полезными.