Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone:如何从公钥文件(PEM)创建SecKeyRef_Iphone_Encryption_Rsa_Public Key - Fatal编程技术网

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

iPhone:如何从公钥文件(PEM)创建SecKeyRef,iphone,encryption,rsa,public-key,Iphone,Encryption,Rsa,Public Key,为了从iPhone发送和接收加密信息,我需要读取一个公钥(服务器的公钥)PEM文件并创建一个SecKeyRef(稍后我甚至可以将其存储在密钥链上,以避免再次创建它) 这是我当前的工作流程: 在服务器上:使用用户证书和私钥创建P12文件。将用户的公钥存储在服务器的密钥链上 在iPhone上:从服务器检索P12文件,使用密码打开它并将私钥存储在钥匙链上 在iPhone上:从服务器检索带有服务器公钥的PEM文件。创建一个SecKeyRef并将其存储在keychain上 在iPhone上:使用两个密钥向

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

这是我当前的工作流程:

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


    谢谢

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

    谢谢您知道我应该使用哪些键/值使用SecItemAdd/SecItemCopyMatching从密钥链存储/检索此键吗?如何创建策略对象?代码片段没有提到任何有关策略的内容?我们是如何获得这些数据的?假设我有一个从openssl命令生成的pub.pem文件,那么我应该使用以下代码:NSData*myCertData=[[NSData alloc]initWithContentsOfFile:@“public.pem”]?创建策略文件的一种方法:SecPolicyRef policy=SecPolicyCreateBasicX509();myCertData是NSData*,但SecCertificateCreateWithData需要CFDataRef。CFDataRef myCertDataRef=(uu桥CFDataRef)myCertData;你能告诉我如何储存和取回钥匙吗?如何参考钥匙链中存储的钥匙?我和你的情况差不多。我想在iPhone中生成密钥对并存储在密钥链中。后来我想找回它。我知道如何生成,但无法成功存储和检索钥匙链。