Ho risolto il mio problema precedente di conversione della chiave privata XML RSA in un file PEM, ma mi imbatto in un altro problema che ottengo dati null durante l'importazione della chiave privata P12. Di seguito è riportato i miei passi:Come rendere un file p12 valido per essere importato correttamente da SecPKCS12Import
Converti file PEM al file P12
openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts
Leggi file P12 al progetto iOS
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data);
Importa P12 chiave privata
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; }
Pensavo che non ci fossero errori (il valore di OSStatus è 0), ma l'array di elementi non ha ottenuto alcun dato di identità. Mi chiedo se non ho ottenuto il formato di file p12 corretto a causa dell'errato utilizzo di OpenSSl. Qualcuno ha importato con successo il file p12? Ho bloccato questo problema per un paio di giorni, ti prego di darmi consigli se hai degli indizi, grazie!
Hubert
A proposito di OpenSSL utilizzo: 1) La chiave di ingresso non sarà sicuramente lo stesso del vostro certificato di ingresso 2) doc dice '-nocerts' creerà alcun certificato in uscita; hai provato senza di essa? – MrTJ