2016-09-08 11 views
12

Mam prywatny klucz w parametrze p12, który ma pusty zestaw passehrase. Teraz, gdy próbuję zaimportować ten klucz prywatny za pomocą SecPKCS12Import na OS X lub iOS, mam błąd (odpowiednik w systemie Windows działa).SecPKCS12Import, gdy p12 odpowiada pustemu hasłu

- (NSError *)setClientIdentityCertificateFromPKCS12Data: (NSData *)PKCS12Data withPassword: (NSString *)password 
{ 
    OSStatus securityError = errSecSuccess; 

    const void *keys[] = { kSecImportExportPassphrase }; 
    const void *values[] = { (__bridge CFStringRef)password }; 
    CFDictionaryRef optionsDictionary = NULL; 

    optionsDictionary = CFDictionaryCreate(
              NULL, keys, 
              values, (password?1:0), 
              NULL, NULL); 
    CFArrayRef items = NULL; 

    securityError = SecPKCS12Import((__bridge CFDataRef)PKCS12Data, 
            optionsDictionary, 
            &items); 

Próbowałem różnych kombinacji, gdy hasło jest puste:

  • optionsDictionary = NULL
  • optionsDictionary bez wartości
  • optionsDictionary z @"" wartości dla klucza kSecImportExportPassphrase

zawsze kończy się na securityError nie jest równy errSecSuccess. Odpowiednio:

  • securityError=-25260 "Do importu/eksportu wymagane jest hasło".
  • securityError=-25260 "Do importu/eksportu wymagane jest hasło".
  • securityError=-25264 "weryfikacja MAC nie powiodło się podczas PKCS12 importu (błędne hasło?)"

Teraz jestem Ok, że to nie działa. Deweloper, że p12 bez hasła jest zagrożeniem bezpieczeństwa, ale jeśli to jest powód, dla którego to nie działa, potrzebuję dokumentacji, która to stwierdza. Próbowałem do Google, że bez szczęścia do tej pory.

Próbowałem również zaimportować ten plik do aplikacji Brelok OS X z tym samym wynikiem (nieprawidłowe hasło), więc musi to być problem z SecPKCS12Import.

A może jest jakiś sposób na przezwyciężenie tego problemu?

Odpowiedz

0

Uważam, że jest to usterka w pakiecie SDK Cocoa, patrz: rdar://22909471.

Niestety, ten radar został zamknięty jako duplikat istniejącego radaru. Złożyłbym dodatkowy raport o błędzie z Apple, aby podnieść ten problem. Mogę wymyślić dwie alternatywy:

  1. Dodaj hasło swój blob p12.

  2. Konwersja certyfikatu na kodowanie DER. This answer może pomóc.

0

Ten problem został już naprawiony, przetestowałem go na iOS 10. Mogę użyć pustego ciągu jako hasła dla mojego p12. Wygląda jednak na to, że nadal wymagany jest kSecImportExportPassphrase.