Как сделать правильный файл p12 корректно импортированным SecPKCS12Import
Я решил проблему, связанную с преобразованием закрытого ключа 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
Ответы
Ответ 1
У меня есть несколько советов из Интернета, и ниже приведены шаги, чтобы получить приемлемый для iOS ключ p12 и файл сертификации:
-
конвертировать XML в PEM
Shell > компилировать XMLSpec2PEM.java
Shell > XMLSpec2PEM rsa.xml
сохранить результат вывода на rsa.pem
(возьмите здесь)
-
конвертировать PEM в закрытый ключ RSA
OpenSSL > rsa -in rsa.pem -out rsaPrivate.key
-
Создание запроса на сертификацию
OpenSSL > req -new -key rsaPrivate.key -out rsaCertReq.crt
(введите некоторые основные данные сертификации)
-
Подпишите сертификацию запроса
OpenSSL > x509 -req -days 3650 -in rsaCertReq.crt -signkey rsaPrivate.key -out rsaCert.crt
-
Преобразовать формат файла сертификации в DER (приемлемый формат iOS)
OpenSSL > x509 -outform der -in rsaCert.crt -out rsaCert.der
-
Создайте закрытый ключ PKCS12 (приемлемый формат iOS)
OpenSSL > pkcs12 -export -out rsaPrivate.pfx -inkey rsaPrivate.key -in rsaCert.crt
Никаких дальнейших шагов, файлы, сгенерированные на шагах 5 и 6, теперь могут быть использованы в iOS!
ссылка на инструкции OpenSSL:
http://blogs.yaclife.com/?tag=ios%E3%80%80seckeyref%E3%80%80raw%E3%80%80key%E3%80%80rsa%E3%80%803des
http://devsec.org/info/ssl-cert.html