我正在为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?我怎么能找到正确的?
答案 0 :(得分:1)
我只需要解决这个问题,从我的研究中,问题是其中一个身份包含私钥而另一个包含公钥。
因此,当您尝试检索身份时,您必须添加
value: kSecAttrKeyClassPrivate / kSecAttrKeyClassPublic
key: kSecAttrKeyClass
到SecItemCopyMatching
中用作过滤器的字典,例如:
NSMutableDictionary *filterDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kSecClassIdentity, kSecClass,
kSecMatchLimitAll, kSecMatchLimit,
kCFBooleanTrue, kSecReturnRef,
kSecAttrKeyClassPrivate, kSecAttrKeyClass,
nil];