代码之家  ›  专栏  ›  技术社区  ›  TehJabbit

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

  •  14
  • TehJabbit  · 技术社区  · 17 年前

    为了在iPhone之间发送和接收加密消息,我需要读取公钥(服务器的公钥)PEM文件并创建一个SecKeyRef(稍后我甚至可以将其存储在密钥链上,以免再次创建)。

    这是我目前的工作流程:

    1. 在iPhone上:从服务器检索P12文件,使用密码打开它并将私钥存储在钥匙链上。
    2. 在iPhone上:使用两个密钥向服务器发送/从服务器接收加密消息。
    3. 从此过上幸福的生活。

    我在使用3时遇到了问题,因为我无法从PEM文件数据创建SecKeyRef。我找不到任何关于如何操作的文档,有人遇到过同样的问题吗?有什么提示吗?由于我找不到任何关于这方面的代码示例或文档,我觉得我做错了什么。..

    谢谢!

    1 回复  |  直到 17 年前
        1
  •  7
  •   Louis Gerbarg    17 年前

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