iPhone:如何从公钥文件(PEM)创建SecKeyRef

时间:2009-10-20 14:28:58

标签: iphone encryption rsa public-key

为了从/向iPhone发送和接收加密消息,我需要读取公钥(服务器的公钥)PEM文件并创建一个SecKeyRef(后来我甚至可以将它存储在钥匙串上,以便不创建它再次)。

这是我目前的工作流程:

  1. 在服务器上:使用用户的证书和私钥创建P12文件。将用户的公钥存储在服务器的钥匙串上。
  2. 在iPhone上:从服务器检索P12文件,使用密码将其打开并将私钥存储在钥匙串上。
  3. 在iPhone上:使用服务器的公钥从服务器检索PEM文件。创建SecKeyRef并将其存储在钥匙串上
  4. 在iPhone上:使用两个密钥向/从服务器发送/接收加密消息。
  5. 从此过上幸福的生活。
  6. 我遇到3问题,因为我无法从PEM文件数据创建SecKeyRef。我找不到任何关于如何做的文档,有没有人有同样的问题?任何提示?因为我找不到任何代码示例或文档,所以我觉得我做错了......

    谢谢!

1 个答案:

答案 0 :(得分:7)

您应该能够解释DER编码的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);