iPhone: jak utworzyć SecKeyRef z pliku klucza publicznego (PEM)

Aby wysyłać i odbierać zaszyfrowane wiadomości z / do iPhone ' a muszę odczytać plik PEM klucza publicznego (klucz publiczny serwera) i utworzyć Seckeyrefa (później mogłem nawet zapisać go na pęku kluczy, aby nie tworzyć go ponownie).

To jest mój aktualny workflow:

  1. na serwerze: Utwórz plik P12 z certyfikatem użytkownika i kluczem prywatnym. Przechowuj klucz publiczny użytkownika na pęku kluczy serwera.
  2. [5]}na iPhone: pobierz plik P12 z serwer, Użyj hasła, aby je otworzyć i przechowywać klucz prywatny na pęku kluczy.
  3. na iPhonie: pobranie z serwera pliku PEM z kluczem publicznym serwera. Utwórz SecKeyRef i zapisz go na pęku kluczy
  4. na iPhonie: używaj obu kluczy do wysyłania / odbierania zaszyfrowanych wiadomości do / z serwera.
  5. Żyj długo i szczęśliwie.

Mam problem z 3, ponieważ nie mogę utworzyć Seckeyrefa z danych pliku PEM. Nie mogę znaleźć żadnej dokumentacji, jak to zrobić, Czy ktoś miał ten sam problem? Jakieś wskazówki? Ponieważ nie mogę znaleźć żadnych przykładów kodu ani Dokumentacji na ten temat, czuję, że robię coś złego...

Dzięki!

Author: pgb, 2009-10-20

1 answers

Powinieneś być w stanie zinterpretować DER zakodowany pem i uzyskać cert za pomocą SecCertificateCreateWithData(), z którego możesz następnie wyodrębnić klucz;

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);
 7
Author: Louis Gerbarg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 19:20:06