iphone - SecItemAdd 创建两个身份

标签 iphone certificate identity keychain

我正在为 iPhone 开发一个应用程序,需要证书来调用某些服务,因此我将证书添加到我的钥匙串(keychain)中,执行以下操作:

 SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certificadoData);
 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
 [dictionary setObject:(__bridge id)kSecClassCertificate forKey:(__bridge id)kSecClass];
 [dictionary setObject:(__bridge id)(cert) forKey:(__bridge id<NSCopying>)(kSecValueRef)];
 OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dictionary, NULL);

当我列出此代码之前的所有 kSecClassIdentity 时,结果为无,而在此代码之后,返回的是两个身份和一个证书。 当我尝试使用这些身份时,其中一个可以正常工作,但另一个则不能。为什么 SecItemAdd 为一个 kSecClassCertificate 创建两个 kSecClassIdentity?我怎样才能识别正确的呢?

最佳答案

我只需解决这个问题,根据我的研究,问题是其中一个身份包含私钥,另一个身份包含公钥。

因此,当您尝试检索身份时,必须添加

value: kSecAttrKeyClassPrivate / kSecAttrKeyClassPublic
key: kSecAttrKeyClass

到在 SecItemCopyMatching 中用作过滤器的字典,例如:

NSMutableDictionary *filterDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                             (__bridge id)kSecClassIdentity, kSecClass,
                                             kSecMatchLimitAll,              kSecMatchLimit,
                                             kCFBooleanTrue,                 kSecReturnRef,
                                             kSecAttrKeyClassPrivate,        kSecAttrKeyClass,
                                             nil];

关于iphone - SecItemAdd 创建两个身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19713368/

相关文章:

ios - 文本字段在填充数据后未格式化

iphone - 点击图像上的标注附件

ios - 在 Interface Builder 中设计 UITableView 的部分标题

mobile - 将 SSL 证书添加到 Adob​​e Air 移动应用程序

python - 使用 PFX 证书连接到 HTTP 站点

php - 有没有办法在纯 PHP 中检测循环数组?

ios - objective-c 中的adler32校验和

ssl - 购买 SSL 证书以使用我的应用程序通过 HTTPS 导航时,我应该设置什么通用名称?

SQL Server 标识列值从 0 而不是 1 开始

java - Java中==和equals()有什么区别?