SecPKCS12Import 和在钥匙串中将证书存储为 NSData 之间的区别?

Difference between SecPKCS12Import and storing certificate as NSData in keychain?

我一直在使用此处的许多资源为 iOS 编写客户端证书代码:iOS Client Certificates and Mobile Device Management 我已经将流程分解为以下步骤:

  1. 通过电子邮件或 AppConfig 获取证书

  2. 存储证书(安全地)

  3. 从证书中提取身份和信任。

  4. 拦截失败的网络请求,创建 NSURLConnection 以根据 Eskimo 的建议手动处理身份验证响应。

  5. 将身份和信任转变为身份验证响应质询。

我的问题是第 2 步。SecPKCS12Import 函数似乎自动将身份添加到钥匙串以及 return 证书中的所有身份和信任,从而消除了对通常提供的便利函数 ExtractIdentityAndTrust() 的需要.

但是在我的第 2 天 运行,我将需要身份和信任,而不仅仅是身份。我目前的计划是使用 SecItemAdd 存储整个原始证书,测试重复项并使用它,但我觉得我应该能够只使用 SecPKCS12Import 然后在不使用 SecItemAdd 的情况下获取它。

最令人困惑的文档是 SecPKCS12Import,我想更清楚地了解它与 secItemAdd 的作用,以及 secItemCopyMatching() 最后是否相同只是为了获取证书。 Trust 是不需要的还是我只是字面上的意思并且它与身份一起存储?

常规保存、使用、存储、抓取功能正常,但我使用的是 NSData 并且更愿意正确存储它

我最终对 KeyChain 和 Identity vs Trust 更加熟悉并了解到:

信任是存储在确定您的自定义证书颁发机构是谁的位置的证书。它只需要测试一次,这就是它不存储的原因。

存储身份也是一种证书,但以后需要。钥匙串认为 Certificates/Identities 是一个 Special/Unique 东西,所以它被存储为它自己的东西,这就是为什么所有钥匙串代码看起来与仅仅保护密码不同的原因。

基本上,存储信任对于将来的参考来说是不必要的,但应该进行检查以获得良好的实践。我个人认为到期可能很方便