14

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

这是我目前的工作流程:

  1. 在服务器上:使用用户的证书和私钥创建一个 P12 文件。将用户的公钥存储在服务器的钥匙串上。
  2. 在 iPhone 上:从服务器检索 P12 文件,使用密码打开它并将私钥存储在钥匙串上。
  3. 在 iPhone 上:从服务器检索带有服务器公钥的 PEM 文件。创建一个 SecKeyRef 并将其存储在钥匙串上
  4. 在 iPhone 上:使用两个密钥向服务器发送/接收加密消息。
  5. 从此过上幸福的生活。

我遇到了 3 的问题,因为我无法从 PEM 文件数据创建 SecKeyRef。我找不到任何关于如何做到这一点的文档,有人有同样的问题吗?有什么提示吗?由于我找不到任何代码示例或文档,所以感觉我做错了什么......

谢谢!

4

1 回答 1

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);
于 2009-10-27T19:10:19.357 回答