2011-09-20 165 views

回答

5

证书是钥匙串项目的子类型,因此您可以使用SecKeychainItemDelete删除它们。为了防止编译器警告,您需要明确地将SecCertificateRef转换为SecKeychainItemRef - 普通的C语言不支持子类。

SecCertificateRef certificate = ...; 
OSStatus status = SecKeychainItemDelete((SecKeychainItemRef)certificate); 
if (status) { 
    // Handle error 
} 

如果目的MAC OS 10.6或更高版本,您还可以使用新的API SecItemDelete。在最简单的情况下,它没有提供任何优势,但您可以更改查询参数以一次删除多个证书,或删除证书而不直接引用它们。

SecCertificateRef certificate = ...; 
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys: 
         kSecClassCertificate, kSecClass, 
         [NSArray arrayWithObject:(id)certificate], kSecMatchItemList, 
         kSecMatchLimitOne, kSecMatchLimit, 
         nil];  
OSStatus status = SecItemDelete((CFDictionaryRef)query); 
if (status) { 
    // Handle error 
}