作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 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
的问题。
或者也许有办法克服这个问题?
最佳答案
我认为这是 Cocoa SDK 的缺陷,请参阅 rdar://22909471
.
不幸的是,该雷达作为现有雷达的复制品已被关闭。我会向 Apple 提交一份额外的错误报告来提升这个问题。我可以想到两种选择:
为您的 p12 blob 添加密码。
将证书转换为 DER 编码。 This answer可能有帮助。
关于ios - SecPKCS12Import when p12 requires an empty passphrase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392338/
我是一名优秀的程序员,十分优秀!