ios - generate - Cómo hacer que un archivo p12 válido sea importado correctamente por SecPKCS12Import
https developer apple com account ios certificate (1)
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 son mis pasos:
Convertir archivo PEM a P12
openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts
Leer el archivo P12 en el proyecto de iOS
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data);
Importar clave privada 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; }
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
Recibí algunos consejos de Internet, y los siguientes son los pasos para obtener la clave p12 y el archivo de certificación de iOS aceptables:
convertir XML a PEM
Shell> compile XMLSpec2PEM.java
Shell> XMLSpec2PEM rsa.xml
guarde el resultado de salida en rsa.pem
(tome prestado de aquí )convertir PEM a clave privada RSA
OpenSSL> rsa -in rsa.pem -out rsaPrivate.keyGenerar una solicitud de certificación
OpenSSL> req -new -key rsaPrivate.key -out rsaCertReq.crt
(ingrese algunos datos de certificación básicos)Firmar la certificación de la solicitud
OpenSSL> x509 -req -days 3650 -en rsaCertReq.crt -signkey rsaPrivate.key -out rsaCert.crtConvierta el formato de archivo de certificación a DER (formato aceptable de iOS)
OpenSSL> x509 -outform der -in rsaCert.crt -out rsaCert.derGenerar clave privada PKCS12 (formato aceptable iOS)
OpenSSL> pkcs12 -export -out rsaPrivate.pfx -inkey rsaPrivate.key -in rsaCert.crt
¡No más pasos, los archivos generados en el paso 5 y 6 ahora se pueden usar en iOS!
referencia de las instrucciones de OpenSSL:
http://blogs.yaclife.com/?tag=ios%E3%80%80seckeyref%E3%80%80raw%E3%80%80key%E3%80%80rsa%E3%80%803des