如何通过代码从Mac Keychain中删除证书?

时间:2011-09-20 02:10:38

标签: macos security certificate keychain

我查看了Apple's Certificate reference,我没有看到任何关于从Keychain中删除证书的信息。

允许吗?

如果是这样,怎么样?如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:5)

证书是钥匙串项的子类型,因此您可以使用SecKeychainItemDelete删除它们。为防止编译器警告,您需要将SecCertificateRef显式强制转换为SecKeychainItemRef - 普通C对子类没有语言支持。

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

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

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
}