【问题标题】:How to create private key from file in Objective C?如何从Objective C中的文件创建私钥?
【发布时间】:2013-04-09 13:01:07
【问题描述】:

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

 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

【问题讨论】:

  • 你的私钥是什么格式的?
  • @MarcusAdams 它在 privatekey.pem 文件中。

标签: ios objective-c security pem


【解决方案1】:

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, 无];

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

在我必须处理 DER/PEM 的情况下 - 我发现与 openssl 链接最容易。然后从那里拿走。

Dw.

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多