Как установить SecIdentityRef в связку ключей iPhone?(Без .p12) - PullRequest
12 голосов
/ 22 ноября 2010

Как создать SecIdentityRef в цепочке для ключей iPhone, если 1) у вас уже есть закрытый ключ в цепочке для ключей и 2) вы только что получили сертификат от CA?

SecPKCS12Import не помогает в этомслучай, если не существует API для создания .p12 из личного ключа и сертификата.

SecIdentityCreateWithCertificate будет ответом на Mac, но он не существует на iPhone.

Является ли этоможно использовать SecItemAdd?http://developer.apple.com/library/ios/#documentation/Security/Reference/keychainservices/Reference/reference.html

большое спасибо, Андрей

1 Ответ

19 голосов
/ 09 апреля 2012

ОК, чтобы ответить на мой собственный вопрос:

В iOS связка ключей автоматически свяжет сертификат с закрытым ключом. Это означает, что вам нужно только:

  1. Генерация пары ключей
  2. Получить сертификат, соответствующий закрытому ключу
  3. Вставьте сертификат в связку ключей.

После этого вы сможете получить SecIdentityRef для сертификата / закрытого ключа.

ВАЖНО: SecItemAdd Функция позволяет напрямую вставлять данные сертификата (NSData представления DER). Таким образом, вы сможете получить действительную ссылку на сертификат, но не идентификационный номер.
Правильный способ *1021* для вставки сертификата - это сначала использовать функцию SecCertificateCreateWithData над байтами DER сертификата. Это вернет объект SecCertificateRef , который затем следует использовать для сохранения сертификата в цепочке для ключей с помощью функции SecItemAdd .

Надеюсь, это облегчит кому-то жизнь; -)

С уважением, Pece

...