ios - 添加第二个证书时,SecItemAdd 返回 -25299

标签 ios objective-c swift security security.framework

当尝试添加第二个证书失败并显示 -25299(该项目已存在。)。他们有不同的 kSecAttrLabel。 在尝试删除之前它也失败了,代码为 -25300(找不到该项目。)。

也许有人知道这段代码有什么问题? 我是否遗漏了某些属性?

if let cer1 = "cert1".dataUsingEncoding(NSUTF8StringEncoding),
   let cer2 = "cert2".dataUsingEncoding(NSUTF8StringEncoding) {
       addCertificate(cer1, label: "TestCertificate_1")
       addCertificate(cer2, label: "TestCertificate_2")
}

    func addCertificate(certificate: NSData, label: String) {
        let query = [
            String(kSecClass) : kSecClassCertificate,
            String(kSecAttrLabel) : label,
            String(kSecValueData) : certificate
        ]
        var status = SecItemDelete(query)
        if status != noErr {
            print("Error deleting cer from keychain. Error: \(status)")
        }

        status = SecItemAdd(query, nil)

        if status != noErr {
            print("Error adding cer to keychain. Error: \(status)")
        }
    }

// Output:
// Error deleting cer from keychain. Error: -25300 (The item cannot be found.)
// Error deleting cer from keychain. Error: -25300 (The item cannot be found.)
// Error adding cer to keychain. Error: -25299 (The item already exists.)

最佳答案

对于 kSecClassCertificate 类的钥匙串(keychain)项,主键是 kSecAttrCertificateType、kSecAttrIssuer 和 kSecAttrSerialNumber 的组合。

let query = [
            String(kSecClass) : kSecClassCertificate,
            String(kSecAttrLabel) : label,
            String(kSecValueData) : certificate,
            String(kSecAttrSerialNumber) : serialNumber
        ]

关于ios - 添加第二个证书时,SecItemAdd 返回 -25299,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690941/

相关文章:

iphone - iOS:如何让两个 UIView 自动填充空间?

ios - 富文本(带图像)性能 - UITextView 与 UIWebview

ios - 在 UINavigationController 中嵌入 UITabBar Controller

iphone - 如何构建一个iPhone应用程序,并确保该应用程序仅在未越狱的设备上运行?

ios - Firestore 文档存在在 iOS Swift 中返回错误结果

ios - 查找用户位置周围各种半径的点

ios - 如何在应用程序启动后立即为用户订阅通知主题?

iphone - 如何在 iOs 中使用 CLGeoCoder 使用邮政编码/邮政编码获取经纬度?

ios - SDWebImage 说 "URL not found"虽然它存在

swift - 禁用 OS X cocoa 中的启动板功能