Я решил проблему, связанную с преобразованием закрытого ключа XML RSA в файл PEM, но я столкнулся с другой проблемой: я получаю нулевые данные при импорте частного ключа P12. Ниже приведены мои шаги:
-
Преобразование PEM файла в файл P12
openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts
-
Прочитайте файл P12 в проекте iOS
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data);
-
Импортировать закрытый ключ P12
SecKeyRef getPrivateKeywithRawKey(NSData *pfxkeydata) { NSMutableDictionary * options = [[[NSMutableDictionary alloc] init] autorelease]; // Set the public key query dictionary //change to your .pfx password here [options setObject:@"MyPassword" forKey:(id)kSecImportExportPassphrase]; CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); OSStatus securityError = SecPKCS12Import((CFDataRef) pfxkeydata, (CFDictionaryRef)options, &items); CFDictionaryRef identityDict = CFArrayGetValueAtIndex(items, 0); SecIdentityRef identityApp = (SecIdentityRef)CFDictionaryGetValue(identityDict, kSecImportItemIdentity); //NSLog(@"%@", securityError); assert(securityError == noErr); SecKeyRef privateKeyRef; SecIdentityCopyPrivateKey(identityApp, &privateKeyRef); return privateKeyRef; }
Мысль о том, что ошибки не было (значение OSStatus равно 0), но массив элементов не получил никаких идентификационных данных. Мне интересно, не получил ли я правильный формат файла p12 из-за неправильного использования OpenSSl. Кто-нибудь успешно импортирует файл p12? Я застрял в этой проблеме в течение нескольких дней, пожалуйста, дайте мне советы, если у вас есть подсказки, спасибо!
Hubert