【问题标题】:SecPKCS12Import when p12 requries an empty passphraseSecPKCS12当 p12 需要空密码时导入
【发布时间】:2017-01-16 11:15:32
【问题描述】:

我在 p12 中有一个私钥,其中设置了空密码。 现在,当我尝试在 OS X 或 iOS 上使用 SecPKCS12Import 导入此私钥时,出现错误(在 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);

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

  • optionsDictionary = NULL
  • optionsDictionary 没有值
  • optionsDictionary@"" 键值 kSecImportExportPassphrase

它总是以securityError 结尾,不等于errSecSuccess。分别:

  • securityError=-25260 "导入/导出需要密码。"
  • securityError=-25260 "导入/导出需要密码。"
  • securityError=-25264“PKCS12导入时MAC验证失败(密码错误?)”

现在我很好,它不起作用。我认为没有密码的p12 是一种安全威胁,但如果这是它不起作用的原因,我需要一些说明这一点的文档。 到目前为止,我已经尝试过谷歌,但没有运气。

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

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

【问题讨论】:

    标签: ios objective-c swift macos security


    【解决方案1】:

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

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

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

    2. 将证书转换为 DER 编码。 This answer 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      这似乎现在已经解决了,我已经在 iOS 10 上测试过了。我可以使用一个空字符串作为我 p12 的密码。不过,kSecImportExportPassphrase 似乎仍然是必需的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 2015-02-27
        • 1970-01-01
        • 2015-07-23
        • 2018-09-06
        • 2019-11-28
        • 2016-09-02
        相关资源
        最近更新 更多