在iOS Keychain中保存证书标识时重复项目

时间:2013-07-23 16:40:22

标签: ios objective-c keychain client-certificates

在尝试将证书标识添加到iOS钥匙串时,我试图找出errSecDuplicateItem方法的状态代码SecItemAdd的确切含义。

阅读iOS文档,它只说这个状态代码意味着该项目在钥匙串中是重复的,但确定身份是否重复的标准是什么?发行人名称?截止日期?都?

如果您阅读Mac OSX文档,a similar方法的讨论部分说明如下:

  

如果证书已添加到指定的钥匙串,   该函数返回errSecDuplicateItem并且不添加另一个副本   到钥匙串。该函数查看证书数据,而不是   证书对象,以确定证书是否是   重复。它认为两个证书是重复的,如果有的话   相同的主键属性。

我知道存在差异,我正在尝试将证书身份保存在钥匙串中,本讨论针对保存证书的SecCertificateAddToKeychain方法;但我相信有联系。

"primary keys attributes"的含义是什么?

我尝试了两次添加相同的身份,当然我得到了errSecDuplicateItem,但我担心如果用户想要更新证书,我可能会收到错误,我不会考虑。

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

据我所知,钥匙串的主要关键属性没有记录。但是,根据message from Ken McLeod,证书由其证书类型,颁发者和序列号标识。钥匙串将拒绝接受多个具有这些属性的完全相同值的证书。

证书颁发机构不得发布具有相同序列号的两个证书,因此您的用户不太可能发生此错误。如果您自己生成证书,还必须确保不会意外地重复使用序列号。