Macos 如何通过代码从Mac密钥链中删除证书?

Macos 如何通过代码从Mac密钥链中删除证书?,macos,security,certificate,keychain,Macos,Security,Certificate,Keychain,我已经调查过了,但没有看到任何关于从密钥链中删除证书的内容 允许吗 如果是,怎么做?如果不是,为什么不呢?证书是密钥链项目的一个子类型,因此您可以使用SecKeychainItemDelete删除它们。为了防止出现编译器警告,您需要显式地将SecCertificateRef强制转换为SecKeychainItemRef-纯C不支持子类的语言 SecCertificateRef certificate = ...; OSStatus status = SecKeychainItemDelete((

我已经调查过了,但没有看到任何关于从密钥链中删除证书的内容

允许吗


如果是,怎么做?如果不是,为什么不呢?

证书是密钥链项目的一个子类型,因此您可以使用
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
}