2
我查看了Apple's Certificate reference,我没有看到任何有关从钥匙串中删除证书的信息。如何通过代码从Mac Keychain中删除证书?
允许吗?
如果是这样,怎么样?如果不是,为什么不呢?
我查看了Apple's Certificate reference,我没有看到任何有关从钥匙串中删除证书的信息。如何通过代码从Mac Keychain中删除证书?
允许吗?
如果是这样,怎么样?如果不是,为什么不呢?
证书是钥匙串项目的子类型,因此您可以使用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
}