【问题标题】:How to delete a certificate from Mac Keychain through code?如何通过代码从 Mac 钥匙串中删除证书?
【发布时间】:2011-11-20 17:09:20
【问题描述】:

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

允许吗?

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

【问题讨论】:

    标签: macos security certificate keychain


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2013-11-03
      • 2015-03-05
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多