2013-04-09 2 views
4

Я создал открытый ключ, как это:Как создать закрытый ключ из файла в Objective C?

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); 

Но как создать закрытый ключ из файла?

Вот какой-то связанный код для создания закрытого ключа, но я не понимаю, как создать секретный ключ из этого, используя мой файл privatekey.

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

+0

Какой формат является вашим личным ключом? –

+0

@MarcusAdams находится в файле privatekey.pem. –

ответ

0

AFAIK нет простого способа создать SecPrivateKeyRef из NSData. Если это вообще возможно - объединить частный & общественный файл в p12:

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

, а затем сделать

NSDictionary * опции = [NSDictionary dictionaryWithObjectsAndKeys: @ "12345678", kSecImportExportPassphrase, ноль];

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

В тех случаях, когда мне приходилось иметь дело с МЭД/PEM - Я нашел, что проще связать с OpenSSL. И возьмите его оттуда.

Dw.

0

У меня была такая же проблема, оказалось, что вам нужно использовать файл p12 для импорта закрытого ключа.

См. Мой ответ здесь https://stackoverflow.com/a/17295321/480467