Подтвердить что ты не робот

Как сделать правильный файл 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

4b9b3361

Ответ 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