当p12需要空密码时,SecPKCS12Import

Mar*_*k R 12 security macos objective-c ios swift

我在p12中有一个私钥,其密码设置为空.现在,当我尝试SecPKCS12Import在OS X或iOS上使用导入此私钥时,我遇到了错误(相当于Windows工作).

- (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);
Run Code Online (Sandbox Code Playgroud)

密码为空时我尝试了不同的组合:

  • optionsDictionary = NULL
  • optionsDictionary 没有价值观
  • optionsDictionary@""关键值kSecImportExportPassphrase

它始终securityError不等于errSecSuccess.分别:

  • securityError=-25260 "导入/导出需要密码短语."
  • securityError=-25260 "导入/导出需要密码短语."
  • securityError=-25264 "PKCS12导入期间MAC验证失败(密码错误?)"

现在我很好,它不起作用.我认为p12没有密码是一种安全威胁,但如果这就是它无法工作的原因,我需要一些文件来说明这一点.到目前为止,我已经试图谷歌没有运气了.

我也尝试将此文件导入OS X Keychain应用程序,结果相同(密码无效),所以这一定是问题SecPKCS12Import.

或者也许有办法克服这个问题?

JAL*_*JAL 2

我相信这是 Cocoa SDK 的一个缺陷,请参阅rdar://22909471

不幸的是,该雷达作为现有雷达的骗局已被关闭。我会向 Apple 提交一份额外的错误报告来解决这个问题。我可以想到两种选择:

  1. 为您的 p12 blob 添加密码。

  2. 将证书转换为 DER 编码。 这个答案可能会有所帮助。