Подтвердить что ты не робот

Codeign не всегда выводит ошибку идентификации через терминал

Я просмотрел уже существующие вопросы, но никто не решил мои проблемы (например, воссоздающие сертификаты). Я создал приложение, в котором внутри приложения у меня есть несколько исполняемых файлов и папок и фреймворков. Всякий раз, когда я пытаюсь выполнить кодовое обозначение "наша личность", my.app всегда не дает идентификатора. Может кто-то дать шаг за шагом процесс этого.

codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app

Ошибка

Developer ID Application: Sai****** (123123123J): no identity found,

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

Ищите помощь в этих линиях

Спасибо

4b9b3361

Ответ 1

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

Проверьте доверие к сертификату, ему нужно доверять для подписи кода (на yosemite, который является третьим последним в разделе доверия в представлении cert в доступе к цепочке ключей). Имейте в виду, что для вашего подписания кода сертификат должен быть в цепочке ключей для входа в систему, мне он нужен в системной цепочке ключей.

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

введите описание изображения здесь

Я исправил это (вы не можете исправить это, поскольку Apple предоставляет вам сертификат. Расширение должно быть только там):

введите описание изображения здесь

Затем я добавил сертификат к доверенным сертификатам подписи после того, как я перетащил сертификат из связки ключей на мой рабочий стол, который создал файл ~/Desktop/gdb-cert.cer(помните, что вы можете опустить -d и -r trustRoot:

$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

Это было немного сложно, потому что я был введен в заблуждение некоторыми интернет-сообщениями и не смотрел на страницу руководства. Некоторые сказали, что вы должны использовать add-trust (https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt). Страшный бит заключался в том, что команда преуспела, но не сделала того, что ей нужно.

После этого я нашел новый сертификат в доверенных сертификатах, например:

$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

В моем случае срок действия сертификата apple истекает, но тот, который я использовал для подписи gdb, не был (ну, я просто создал его сам). Также имейте в виду, что политика называется по-разному для "security add-trusted-cert" (- p codeSign) и команды "security find-identity" (-p кодовое обозначение). Затем я продолжил подписывать gdb, и я также всегда получал:

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

потому что у меня создалось впечатление, что я должен указать имя файла сертификата для параметра -sign, но на самом деле это CN сертификата, который я должен был предоставить, и должен находиться в хранилище доверия, Вы можете найти CN здесь, дважды щелкнув cert в цепочке ключей:

введите описание изображения здесь

или в вышеприведенном выводе "security find-identity -p codesigning". Затем я пошел подписать, и я должен был дать ему правильный брелок. В вашем случае это должно быть ~/Library/Keychains/login.keychain, в моем случае System.keychain:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

Тогда я дал мне рабочий gdb, и он должен предоставить вам подписанное приложение.

Ответ 2

У меня были проблемы с этим. Дважды проверьте, что ваш идентификатор подписи кода находится в вашей цепочке ключей, и вы можете использовать отпечаток пальца SHA-1 вместо имени после -s.

Вы можете найти отпечаток SHA-1, открыв Keychain Access и выбрав сертификат Developer ID Application: FOO, а затем выбрав Получить информацию. Отсюда прокрутите до нижней части информации, пока не достигнете Отпечатков пальцев. Отпечаток пальца SHA-1 здесь можно скопировать, и вам придется удалить все пробелы, но после этого у вас будет 40-значный идентификатор, который будет подходящим для размещения после -s в вашем заявлении codeign.

Если у вас все еще есть проблемы с поиском ключа, попробуйте следующее из терминала:

certtool y | grep Developer\ ID

и найдите что-нибудь с Developer ID Application в Common Name, чтобы убедиться, что сертификат фактически находится в цепочке ключей, доступной из терминала. Если вы ничего не увидите в ответ, это будет означать, что связка ключей, содержащая ваши учетные данные, недоступна для вашего сеанса Terminal. Причинами этого могут быть такие вещи, как блокировка keychain, оболочка работает как другой пользователь, выполняя команду с разными разрешениями (например, sudo).

После выполнения команды выше вы должны иметь как минимум следующее:

Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority

Если у вас нет всех трех, вы должны пойти и загрузить отсутствующие элементы. Хотя в настоящее время вам не нужно создавать установщик, нет никакого вреда в его использовании. Элементы приложения и установщика можно загрузить из раздела Mac Certificates вкладки Сертификаты, идентификаторы и профили на Сайт разработчика Apple. У вас должны быть списки, которые не истекли. Возможно, у вас есть списки, которые истекли. Чтобы установить сертификаты в цепочку ключей:

  • Доступ к сайту разработчика Apple
  • Доступ к Центру Mac Dev
  • Доступ Сертификаты, идентификаторы и профили
  • Загрузите сертификаты с портала
  • Дважды щелкните значок "Сертификаты и доступ к ключам", чтобы открыть
  • Разрешить доступ к ключам для добавления сертификатов в цепочку ключей

Центр сертификации удостоверений разработчика должен быть установлен Xcode, но если это не так, вы можете установить его самостоятельно. Вам нужно будет загрузить это отдельно от Author ID Authorization или нажав ссылку + в Сертификаты и используйте ссылку внизу для загрузки сертификата.

Это также будет хорошим временем, чтобы убедиться, что у вас есть центр сертификации сертификатов Apple Worldwide, который является основой для некоторых инструментов подписи. Он должен быть установлен в цепочке ключей System, установщиком Xcode и может быть загружен непосредственно из ссылки + на вкладке Сертификаты выше или с Apple WWDR CA.

Согласно Apple Руководство по распространению приложений, существуют специальные связки ключей, которые подходят для каждого из сертификатов и ключей:

  • Ваши личные ключи и ваши сертификаты подписи (Developer ID Installer, Application Developer Application и сертификаты App Store) должны быть в цепочке входа
  • Центр сертификации сертификатов Apple Worldwide и Центр сертификации удостоверений разработчика входят в цепочку Система
  • Сертификаты разработчика также входят в цепочку login

Обслуживание брелка

Поскольку Xcode автоматически манипулирует связующими звеньями и потому, что некоторые сертификаты регулярно переиздаются при изменении профиля (хотя и не для идентификатора разработчика, поскольку он имеет многолетние сертификаты и не требует профилей), вы можете получить распространение ненужных и потенциально запутанных сертификатов в вашей цепочке ключей. Это хорошая идея, чтобы очистить их, когда они истекли, поскольку они могут создать некоторую путаницу для Xcode.

ПРЕДОСТОРОЖНОСТИ

  • Прежде чем выполнять какое-либо обслуживание на своих брелках, убедитесь, что у вас есть резервная копия ваших цепочек ключей.
  • Этот процесс предназначен для удаления ненужных сертификатов, связанных с разработкой. Если сертификаты не начинаются с Mac Developer, стороннего разработчика Mac, разработчика iPhone или идентификатора разработчика, не связывайтесь с ними в это время. Если вы случайно удалили сертификат, полученный по электронной почте (например), даже если он истек, вы не сможете прочитать полученное письмо.

Чем заняться:

  • Выйти из Xcode
  • Запустите первую помощь для ключей (от Доступ к цепочке ключей) и убедитесь, что ваши брелки в порядке
  • Нажмите на Сертификаты на левой боковой панели
  • Найдите все истекшие сертификаты разработчика указанных выше видов. Они появятся с небольшим X в нижнем правом углу.
  • Выберите сертификаты, которые вы удаляете, и создавайте резервные копии, используя Файл > Экспортировать элементы...
  • Поместите этот файл в безопасное место и дайте ему хороший пароль.
  • Удалите резервные копии сертификатов
  • Просмотрите оставшиеся сертификаты и убедитесь, что у вас есть сертификаты, упомянутые в предыдущем разделе. Если вы этого не сделаете, вам нужно будет загрузить и, возможно, обновить их.
  • Убедитесь, что сертификаты находятся в цепочках ключей, которые указаны выше (все ваши сертификаты подписывания должны быть в вашем ключевом ключе login, например)

Ответ 3

Наконец, ответ был очень прост. Мой закрытый ключ отсутствовал. Для этого я отозвал сертификат и выполнил его шаги в программе разработчика (особенно создавая сертификат CSR во время процесса, который я не получал несколько раз, если только я не отозвал сертификат).

Ответ 4

Как даже

certtool y | grep "Developer ID Application: xxxx"

не удалось отобразить какие-либо результаты, я предположил, что это проблема доступа к требуемой цепочке ключей. Поэтому, прежде всего, я проверил, к закрытому ключу можно было обращаться любыми приложениями в самой цепочке ключей, а затем я начал использовать параметр k=/Users/myUser/Library/Keychains/login.keychain в команде certtool, и, как это удалось, я сделал то же самое с

codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"