He resuelto mi problema anterior de convertir la clave privada XML RSA al archivo PEM, pero me encuentro con otro problema al obtener datos nulos al importar la clave privada P12. Lo que sigue es mis pasos: archivo PEMCómo hacer que un archivo p12 válido sea importado correctamente por SecPKCS12Import
Convertir a archivo P12
openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts
Leer archivo P12 al proyecto IOS
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data);
P12 Importación de la clave privada
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; }
Pensé que no había errores (el valor OSStatus es 0), pero la matriz de elementos no obtuvo ningún dato de identidad. Me pregunto si no obtuve el formato de archivo p12 correcto debido al uso incorrecto de OpenSSl. ¿Alguien ha importado con éxito el archivo p12? Me he quedado atrapado en este problema por un par de días, por favor dame consejos si tienes pistas, ¡gracias!
Hubert
sobre el uso de OpenSSL: 1) La clave de entrada no será seguramente el mismo que su certificado de entrada 2) doc dice '-nocerts' creará ningún certificado en la salida; ¿Lo intentaste sin eso? – MrTJ