OSX Keychain Access - генерирует CSR из существующего Private Key для APNS (Apple Push Notification Service)

Когда вам нужно создать новый сертификат для APNS, "Мастер-портал Provisioning Portal" всегда дает шаги для создания нового CSR, что означает, что вам также нужно создать новый общедоступный/закрытый ключ. Они могут начать выходить из-под контроля, так есть ли способ создать CSR (запрос подписи кода) в Keychain Access из существующего Private Key вместо того, чтобы каждый раз создавать новый?

Спасибо

Ответ 1

Когда вы переходите в профиль Provisioning Profile для включения/настройки Push-уведомлений, первое, что он просит, это CSR (сертификат подписи кода).

Вы можете сгенерировать это с помощью существующего закрытого ключа из Keychain Access вместо создания нового.

Просто откройте доступ к keychain, а затем прокрутите страницу и найдите предыдущий PRIVATE KEY (возможно, называемый YOUR NAME), а затем щелкните правой кнопкой мыши (щелкните двумя пальцами) на нем и выберите Запрос сертификата от центра сертификации с помощью bla bla bla ".

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

Затем загрузите это, чтобы создать ваши .cer файлы.

Ответ 2

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

К сожалению, это не сработает с "Указанный элемент не может быть найден в Keychain", если у вас также нет соответствующего открытого ключа в вашей цепочке ключей. Там нет технической причины для этого - запрос подписи сертификата (CSR) может быть сгенерирован только из частного ключа, но Keychain Access не понимает этого.

У вас есть два варианта.

Экспортировать закрытый ключ и генерировать CSR вручную

Это быстрый вариант, который просто сгенерирует CSR, который вы можете загрузить в Apple.

  • Выберите закрытый ключ в Keychain Access, затем нажмите Файл - Экспортировать элементы....
  • Сохраните файл в формате .p12 где-нибудь, но запомните путь. Эти инструкции предполагают это в вашем домашнем каталоге и называются exported.p12. Оставьте пароль пустым.
  • Откройте терминал и введите:

    openssl req -new -key <(openssl pkcs12 -in ~/exported.p12 -nocerts -nodes -passin pass:"") > new.certSigningRequest
    

    См. [1] в конце этого сообщения для получения подробной информации о том, что происходит.

  • Нажмите Enter для каждого приглашения (Apple не заботится об этих значениях). Когда вы закончите, у вас будет .certSigningRequest, подходящий для загрузки на портал разработчиков Apple. Когда вы загружаете связанный сертификат, он соединяется с исходным закрытым ключом.

  • Удалите файл exported.p12, так как он содержит материал закрытого ключа.

Восстановить открытый ключ, чтобы доступ к Keychain был счастлив

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

  • Выберите закрытый ключ в Keychain Access, затем нажмите Файл - Экспортировать элементы....
  • Сохраните файл в формате .p12 где-нибудь, но запомните путь. Эти инструкции предполагают это в вашем домашнем каталоге и называются exported.p12. Оставьте пароль пустым.
  • Откройте терминал и введите:

    openssl pkcs12 -in ~/exported.p12 -nocerts -nodes | openssl rsa -pubout > public.pem
    

    См. [2] в конце этого сообщения для получения подробной информации о том, что происходит.

  • Импортируйте этот открытый ключ в Keychain Access с помощью инструмента security:

    security -v import public.pem -k ~/Library/Keychains/login.keychain
    

    Вы должны увидеть "1 импортированный ключ".

Измените ~/Library/Keychains/login.keychain, если вы хотите импортировать это в другую цепочку ключей. (Вы можете видеть, где живет каждый брелок, выбрав Изменить - Список связок ключей в доступе к цепочке ключей).

  1. Откройте Keychain Access и найдите открытый ключ под названием "Импортированный открытый ключ". Дважды щелкните его и измените его имя на то же, что и ваш первоначальный закрытый ключ.
  2. Удалить exported.p12 и public.pem.

Теперь вы можете щелкнуть правой кнопкой мыши исходный закрытый ключ и выбрать Запрос сертификата из центра сертификации с именем вашего ключа, чтобы создать CSR.

Пояснения

[1] Эта команда разбита:

openssl req -new  # Generate a new certificate signing request
  -key            # Instead of generating a key, use an existing one
  <(              # Put the output of the following command in a temporary file
                  # (a Bash feature, not specific to OpenSSL)
  openssl pkcs12 -in ~/exported.p12 # Read keys from the specified PKCS12 file
  -nocerts         # Don't output the certificate contained in the file
  -nodes           # Output the private key from the file
  -passin pass:""  # The password for the container is blank
  )
> new.certSigningRequest # Write the generated CSR to a file

[2] Вторая команда, разбитая:

openssl pkcs12 -in ~/exported.p12 # Read keys from the specified PKCS12 file
  -nocerts -nodes                 # Output only the private key, no certificates
| openssl rsa -pubout             # Compute the public key from a private key
> public.pem                      # Write the public key to a file