Tôi đã giải quyết vấn đề về chuyển đổi khóa riêng tư RSA thành tệp PEM, nhưng tôi gặp phải một vấn đề khác mà tôi nhận được dữ liệu rỗng khi nhập khóa riêng P12. Sau đây là các bước của tôi:Cách tạo tệp p12 hợp lệ để được nhập chính xác bởi SecPKCS12Import
Chuyển đổi tập tin PEM để tập P12
openssl> pkcs12 -export -in rsa.pem -inkey rsa.pem -out rsa.p12 -nocerts
đọc tập tin P12 cho dự án iOS
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"MyPrivateKey" ofType:@"p12"]; NSData *p12data = [NSData dataWithContentsOfFile:path]; if (![self getPrivateKeyRef]) RSAPrivateKey = getPrivateKeywithRawKey(p12data);
nhập P12 Private Key
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; }
Tư tưởng không có lỗi (giá trị OSStatus là 0), nhưng mảng mục không nhận được bất kỳ dữ liệu nhận dạng nào. Tôi tự hỏi nếu tôi đã không nhận được đúng định dạng tập tin p12 do sử dụng OpenSSl sai. Có ai nhập thành công tệp p12 không? Tôi đã mắc kẹt trong vấn đề này trong một vài ngày, xin vui lòng cho tôi lời khuyên nếu bạn có manh mối, cảm ơn!
Hubert
Về OpenSSL sử dụng: 1) Chìa khóa đầu vào sẽ chắc chắn không giống như giấy chứng nhận đầu vào của bạn 2) doc nói '-nocerts' sẽ tạo ra không chứng chỉ ở đầu ra; bạn đã thử mà không có nó? – MrTJ