Сертификаты являются подтипом элементов цепочки для ключей, поэтому вы можете использовать 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
}