IPhone: как создать SecKeyRef из файла открытого ключа (PEM)
Чтобы отправлять и получать зашифрованные сообщения с/на iPhone, мне нужно прочитать PEM файл открытого ключа (открытый ключ сервера) и создать SecKeyRef (позже я мог бы даже хранить его на цепочке ключей, чтобы не создавать его снова).
Это мой текущий рабочий процесс:
- На сервере: создайте файл P12 с сертификатом пользователя и закрытым ключом. Храните открытый ключ пользователя в цепочке ключей сервера.
- На iPhone: извлеките файл P12 с сервера, используйте пароль, чтобы открыть его и сохранить закрытый ключ в цепочке ключей.
- На iPhone: извлеките файл PEM с открытым ключом сервера с сервера. Создайте SecKeyRef и сохраните его на цепочке ключей
- На iPhone: используйте оба ключа для отправки/получения зашифрованных сообщений на/с сервера.
- Жить долго и счастливо.
У меня проблемы с 3, так как я не могу создать SecKeyRef из данных файла PEM. Я не могу найти документацию о том, как это сделать. У кого-то была такая же проблема? Любые намеки? Поскольку я не могу найти примеры кода или документацию по этому поводу, мне кажется, что я делаю что-то неправильно...
спасибо!
Ответы
Ответ 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);