SecItemAdd创建两个身份

时间:2013-10-31 17:47:47

标签: iphone certificate identity keychain

我正在为iPhone开发一个需要证书来调用某些服务的应用程序,所以我在我的钥匙串中添加了一个证书:

 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时,结果为none,在此代码之后,返回的是两个身份和一个证书。 当我尝试使用身份时,一个正常工作但另一个没有。为什么SecItemAdd为一个kSecClassCertificate创建了两个kSecClassIdentity?我怎么能找到正确的?

1 个答案:

答案 0 :(得分:1)

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

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

value: kSecAttrKeyClassPrivate / kSecAttrKeyClassPublic
key: kSecAttrKeyClass

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

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