我有一个shell脚本,可以将p12导入到用户的钥匙串中。例如,OSX上命令行的一个例子是:
"security import /tmp/somecertificate.p12 -k ~/Library/Keychains/login.keychain -P somepass -x "
-x标志将私钥标记为不可导出,并且可以正常工作。
有没有办法在目标C中执行此操作?我目前正在编写一个OSX应用程序,并希望在安全框架中本地执行此操作。我有这个代码工作并将P12导入到钥匙串,但我无法弄清楚如何将私钥标记为不可提取。我对p12导入的目标C如下:
NSString * password = @"somepassword";
NSString * path = [[NSBundle mainBundle]
pathForResource:@"somecertificate" ofType:@"p12" inDirectory:@"/tmp"];
// prepare password
CFStringRef cfPassword = CFStringCreateWithCString(NULL,
password.UTF8String,
kCFStringEncodingUTF8);
const void *keys[] = { kSecImportExportPassphrase };
const void *values[] = { cfPassword };
CFDictionaryRef optionsDictionary
= CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1,
NULL, NULL);
// prepare p12 file content
NSData * fileContent = [[NSData alloc] initWithContentsOfFile:path];
CFDataRef cfDataOfFileContent = (__bridge CFDataRef)fileContent;
// extract p12 file content into items (array)
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
OSStatus status = errSecSuccess;
//import p12
status = SecPKCS12Import(cfDataOfFileContent,
optionsDictionary,
&items);
感谢您提供的任何信息。