ios kSecClassCertificate 产量 -25303

ios kSecClassCertificate yields -25303

我正在尝试将 p12(pfx) 证书存储到 ios 上的钥匙串中 基本上使用来自 keychainswift 的代码,只是 klass 从密码更改为证书:

@discardableResult
open func setCertificate(_ value: Data, forKey key: String,
  withAccess access: KeychainSwiftAccessOptions? = nil) -> Bool {
  
  // The lock prevents the code to be run simultaneously
  // from multiple threads which may result in crashing
  lock.lock()
  defer { lock.unlock() }
  
  deleteNoLock(key) // Delete any existing key before saving it

  let accessible = access?.value ?? KeychainSwiftAccessOptions.defaultOption.value
    
  let prefixedKey = keyWithPrefix(key)
    
  var query: [String : Any] = [
    KeychainSwiftConstants.klass      : kSecClassCertificate,
    KeychainSwiftConstants.attrAccount : prefixedKey,
    KeychainSwiftConstants.valueData   : value,
    KeychainSwiftConstants.accessible  : accessible
  ]
    
  query = addAccessGroupWhenPresent(query)
  query = addSynchronizableIfRequired(query, addingItems: true)
  lastQueryParameters = query
  
  lastResultCode = SecItemAdd(query as CFDictionary, nil)
  
  return lastResultCode == noErr
}

getting -25303(无效属性) 我是否应该使用不同的密钥分别存储身份、证书链和信任才能使其正常工作?

鉴于我们,kSecClassCertificate 和 kSecClassPassword 存储类别之间有什么区别 有钥匙串沙盒但没有 GUI? 这是为了向前兼容 macos 还是什么?

PS。 Apple 请尝试找到一位技术作家,他可以修复有关安全框架的可怕文档。谢谢!

documentation 中提到了证书的所有可用属性。我相信你的 attrAccount 是一个无效参数,我觉得,但我不确定 valueData 可能无效。所以至少删除 attrAccount 和可能的 valueData.