gpt4 book ai didi

ios - 使用电子邮件地址在钥匙串(keychain)中搜索证书

转载 作者:行者123 更新时间:2023-11-29 10:45:38 24 4
gpt4 key购买 nike

我正在尝试使用电子邮件地址直接在钥匙串(keychain)中搜索证书。这就是我现在拥有的:

OSStatus status = errSecSuccess;


CFMutableDictionaryRef query = CFDictionaryCreateMutable(kCFAllocatorDefault, 4, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionaryAddValue(query, kSecReturnRef, kCFBooleanTrue);
CFDictionaryAddValue(query, kSecMatchLimit, kSecMatchLimitAll);
CFDictionaryAddValue(query, kSecClass, classType);
CFDictionaryAddValue(query, kSecMatchEmailAddressIfPresent, (__bridge const void *)(emailAddress));

CFArrayRef result = nil;
status = SecItemCopyMatching(query, (CFTypeRef *)&result);
NSLog(@"Retrieved Item from Keychain With PersistedRef - Status: %@", [self tradeStatusForString:status]);


if (query)
CFRelease(query);

if(status != errSecSuccess)
return nil;
else
return result;

但是,我获得了所有证书,而不是带有电子邮件地址的证书。我知道这些证书有电子邮件地址这一事实,所以我不确定这里有什么不正确的地方。

感谢任何帮助,谢谢!

最佳答案

我永远无法让 kSecMatchEmailAddressIfPresent 正常工作,但找到了替代解决方案。

在钥匙串(keychain)中存储项目时可以设置一些属性。因此,当我存储证书时,我将 kSecAttrLabel 设置为电子邮件地址。

NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
[query setValue:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnPersistentRef];
[query setValue:(__bridge id)item forKey:(__bridge id)kSecValueRef];
[query setValue:(id)emailAddress forKey:(__bridge id)kSecAttrLabel];

NSData *returnData = nil;
status = SecItemAdd((__bridge CFDictionaryRef)query, (void *)&returnData);

然后在查找证书时,我会将 kSecAttrLabel 作为搜索参数。

NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
[query setValue:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit];
[query setValue:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnPersistentRef];
[query setValue:(__bridge id)classType forKey:(__bridge id)kSecClass];
[query setValue:(id)emailAddress forKey:(__bridge id)kSecAttrLabel];

CFArrayRef result = nil;
status = SecItemCopyMatching((__bridge CFDictionaryRef)(query), (CFTypeRef *)&result);

这对我有用,因为我事先已经知道证书绑定(bind)的电子邮件地址。但是,如果您事先不知道该电子邮件,您可以从 kSecPolicyName ( Security Policy Keys ) 或使用 openssl 提取它。

关于ios - 使用电子邮件地址在钥匙串(keychain)中搜索证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com