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

IPhone: как создать SecKeyRef из файла открытого ключа (PEM)

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

Это мой текущий рабочий процесс:

  • На сервере: создайте файл P12 с сертификатом пользователя и закрытым ключом. Храните открытый ключ пользователя в цепочке ключей сервера.
  • На iPhone: извлеките файл P12 с сервера, используйте пароль, чтобы открыть его и сохранить закрытый ключ в цепочке ключей.
  • На iPhone: извлеките файл PEM с открытым ключом сервера с сервера. Создайте SecKeyRef и сохраните его на цепочке ключей
  • На iPhone: используйте оба ключа для отправки/получения зашифрованных сообщений на/с сервера.
  • Жить долго и счастливо.

У меня проблемы с 3, так как я не могу создать SecKeyRef из данных файла PEM. Я не могу найти документацию о том, как это сделать. У кого-то была такая же проблема? Любые намеки? Поскольку я не могу найти примеры кода или документацию по этому поводу, мне кажется, что я делаю что-то неправильно...

спасибо!

4b9b3361

Ответ 1

Вы должны иметь возможность интерпретировать PER закодированный pem и получать сертификат, используя SecCertificateCreateWithData(), из которого вы можете извлечь ключ;

NSData *myCertData = ....;

SecCertificateRef cert = SecCertificateCreateWithData (kCFAllocatorDefault, myCertData); 
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL); 

SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, &trustResult);
SecKeyRef pub_key_leaf = SecTrustCopyPublicKey(trust);