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

时间:2018-03-07 15:42:21

标签: keychain client-certificates

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

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

  2. 存放证书(安全)

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

  4. 拦截失败的网络请求,创建NSURLConnection以根据爱斯基摩人的建议手动处理身份验证回复。

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

  6. 我的问题是第2步.SecPKCS12Import函数似乎会自动将标识添加到钥匙串中,并从证书中返回所有身份和信任,从而无需通常使用ExtractIdentityAndTrust()来提供便利功能。

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

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

    一般的保存,使用,存储,抓取工作正常,但我使用的是NSData并且更愿意正确存储

1 个答案:

答案 0 :(得分:0)

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

信托是存储在确定您的自定义证书颁发机构对象的地方的证书。它只需要测试一次,这就是为什么它没有被存储。

存储身份也是一种证书,但稍后需要。钥匙串认为证书/身份是特殊/独特的东西,因此它被存储为自己的东西,这就是为什么所有的钥匙串代码看起来都不同于仅保护密码。

基本上,存储信任是不必要的,以备将来参考,但应检查是否有良好做法。我个人认为过期可能很方便