4

我创建了一个这样的公钥:

 NSString *pkFilePath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"];
NSData *myCertData = [NSData dataWithContentsOfFile:pkFilePath];


SecCertificateRef cert = SecCertificateCreateWithData (kCFAllocatorDefault, (CFDataRef)myCertData);
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL);

SecTrustRef trust;
SecPolicyRef myPolicy   = SecPolicyCreateBasicX509();
SecTrustCreateWithCertificates(certs, myPolicy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, &trustResult);
SecKeyRef pub_key_leaf = SecTrustCopyPublicKey(trust);
NSLog(@"%@",pub_key_leaf);

但是如何从文件中创建私钥?

这是一些创建私钥的相关代码,但我不知道如何使用我的私钥文件从中创建私钥。

https://developer.apple.com/library/mac/#documentation/security/conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html#//apple_ref/doc/uid/TP40001358-CH208-SW10

4

2 回答 2

0

AFAIK 没有简单的方法可以从 NSData 创建 SecPrivateKeyRef。如果可能的话 - 将您的私人和公共文件合并到 p12 中:

openssl pkcs12 -export -out combined.p12 -in public.der -inform DER -inkey private...
Password: 12345678

然后做

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: @"12345678", kSecImportExportPassphrase, nil];

OSStatus status = SecPKCS12Import((__bridge CFDataRef)pkcs12derAsData,  
     (__bridge CFDictionaryRef)options, &items);

在我不得不处理 DER/PEM 的情况下——我发现与 openssl 链接最容易。并从那里拿走它。

德。

于 2013-05-31T16:56:47.393 回答
0

我有同样的问题,原来你需要使用 p12 文件来导入私钥。

在这里查看我的答案https://stackoverflow.com/a/17295321/480467

于 2013-06-25T10:50:34.970 回答