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

标签 macos security certificate keychain

我调查了 Apple's Certificate reference ,而且我没有看到任何有关从钥匙串(keychain)中删除证书的信息。

允许吗?

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

最佳答案

证书是钥匙串(keychain)项的子类型,因此您可以使用 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
}

关于macos - 如何通过代码从 Mac Keychain 中删除证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7479324/

相关文章:

security - 防止程序员知道运行时使用的密码

database - 我可以做些什么来处理网站上用户的不良行为?

visual-studio-2010 - 续订 ClickOnce 证书失败,即使它针对 .NET 4.0 Framework

google-cloud-platform - 为什么我的 GCP 负载均衡器证书在配置时卡住了?

objective-c - 通过代码验证应用程序的签名

c++ - 在 Office for Mac VBA 中调用 dylib 函数

java - IBM WEME J9 无效填充异常

安卓工作室 : custom keymap file location on OSX

objective-c - 为什么类型为 id<someProtocol> 的变量不能接收 id<otherProtocol> 的参数,即使 'otherProtocol' 符合 'someProtocol' ?

node.js - OpenSSL 错误 - 无法获取本地颁发者证书