通过CN删除证书的一种简单方法(证书以前由SecItemAdd从PKCS12导入文件中放到那里);我收到错误消息:
属性列表对于以下格式无效:200(属性列表不能包含“ SecIdentity”类型的对象)
基于https://developer.apple.com/documentation/security/1395547-secitemdelete的地方,我想我正在按照说明进行操作:
要删除瞬态引用标识的项目,请指定
kSecMatchItemList搜索关键字,并使用
之前调用kSecReturnRef返回类型的键
SecItemCopyMatching或SecItemAdd函数。
给这封信。代码如下:
NSDictionary * attributes;
NSString * cnString = @"/CN=foo";
attributes = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)(kSecClassIdentity), kSecClass,
cnString, kSecMatchSubjectContains,
kSecMatchLimitAll, kSecMatchLimit,
kCFBooleanTrue, kSecReturnRef,
nil];
CFArrayRef result;
status = SecItemCopyMatching((__bridge CFDictionaryRef)(attributes),
(CFTypeRef *)&result);
if (status == noErr) {
for(int i = 0; i < CFArrayGetCount(result); i++) {
SecIdentityRef item = (SecIdentityRef) CFArrayGetValueAtIndex(result, i);
NSLog(@"Item #%d: %@", i, item);
attributes = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)(kSecClassIdentity), kSecClass,
[NSArray arrayWithObject:(__bridge id)item], kSecMatchItemList,
kSecMatchLimitOne, kSecMatchLimit,
nil];
status = SecItemDelete((__bridge CFDictionaryRef)(attributes));
if (status != noErr || status != errSecItemNotFound)
NSLog(@"Delete %d/%@failed: %ld (ignored)", i,item, status);
};
};
控制台上的输出为:
Item #0: <SecIdentityRef: 0xc7359ff0>
在找到之后(如果扩大搜索范围,我们会得到这些数组)。
然后从Security.dylib内部深入了解:
属性列表对于以下格式无效:200(属性列表不能包含“ SecIdentity”类型的对象)
最终保释:
Delete 0/<SecIdentityRef: 0xc7359ff0>failed: -50 (ignored)
我究竟做错了什么?
最佳答案
最新的GM版本已修复此问题。现在,现实与文档同步。
关于iphone - ios/SecItemDelete不接受SecIdentityRef/kSecMatchItemList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10516295/