- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为我们的 iPhone 应用程序实现 SSL 客户端身份验证,并使用应用程序钥匙串(keychain)来存储客户端身份(证书 + 私钥)。将项目添加到钥匙串(keychain)后,我在使用 SecItemCopyMatching 时得到了一些意想不到的结果。快速总结:我将一个 SecIdentityRef 添加到钥匙串(keychain),但 SecItemCopyMatching 之后发现了两个。让我从事实开始。
我在装有 iOS 4.3.5 的 iPod 上运行我的应用程序。
我有一个空的应用程序钥匙串(keychain)。
我的证书都是使用 openssl 创建的,并通过 PKCS#12 文件作为电子邮件附件部署到 iPod。PKCS#12 文件包含:
SecPKCS12Import 成功导入文件,生成的字典内容如下:
使用 SecItemAdd,我成功地将“身份”添加到钥匙串(keychain)。
接下来,我从字典中检索“链”数组并尝试添加证书。这样做时,第一个失败并出现错误 errSecDuplicateItem。我认为这是因为第一个证书是客户端证书,并且在我添加身份时它已经添加到钥匙串(keychain)中。其他两个证书添加无误。
现在,如果我返回并使用带有这些键/值对的 SecItemCopyMatching...
keys = {kSecClass, kSecReturnRef, kSecMatchLimit}
values = {kSecClassIdentity, kCFBooleanTrue, kSecMatchLimitAll}
...返回两个身份!此外,如果我检索每个 (SecIdentityCopyCertificate) 的证书,然后检索摘要 (SecCertificateCopySubjectSummary),我会看到这两个身份具有相同的证书!
最后,当我尝试从钥匙串(keychain) (SecItemDelete) 中清除身份时,第一次尝试成功,但第二次失败并返回 errSecItemNotFound。
从我一直在进行的所有谷歌搜索中可以清楚地看出,iOS 钥匙串(keychain)存在“问题”。但是,我还没有看到这方面的报道;我也没有看到任何相关的东西。
所以,我的问题:
如果需要,我可以发布代码和/或证书转储。
提前致谢
肯·克罗斯西门子企业网络。
最佳答案
据我所知,您正在正确使用 SecItemCopyMatching
。
SecIdentityRef
项实际上并未存储在钥匙串(keychain)中;它们是为具有可用关联私钥的证书动态生成的。重复的身份确实很奇怪,并且可能表示框架问题——也许框架被第二组证书中的重复混淆了? (请务必在 bugreport.apple.com 提交错误!)当您重新启动应用程序时,重复的身份是否会消失?
另一方面,重复的身份不一定会导致任何实际问题。如果您担心您可能使用了错误的身份,只需要求 SecItemAdd
提供对它“创建”的身份的持久引用,并使用它来检索 SecIdentityRef
需要。
关于ios - SecItemCopyMatching 返回的 SecIdentityRef 项多于使用 SecItemAdd 添加的项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305947/
我有以下型号:http://slexy.org/view/s20T8yOiKZ from mxutils.cms_services import generate_secid from django.
我遇到了一个问题..当我用我的程序运行 valgrind 时,我得到了以下输出,这让我很困惑: ==12919== HEAP SUMMARY: ==12919== in use at exit
我有一张产品销售表。每笔销售都有一个项目代码(例如序列号)和一个日期。 item_code | date a | 2013-01-01 a | 2013-01-18 b | 3013-02-10 c
是否可以定义一个不限于 1 个字符的分隔符?基于标题的示例,我想将我的分隔符定义为例如'#+#'。文本文件/行可以包含这两个字符,但您遇到特定子字符串/文本组合的可能性很小。 最佳答案 不可以,您不能
Produce a PDA to recognise the following language : the language of strings containing more a's than
我想做一个程序,想像这样生成一个 process -> n process -> n process 第二级可以使用多处理生成进程吗?使用 python 2.6 的 multiprocessinf 模
我对使用 CNN 进行图像识别非常陌生,目前使用 Keras(VGG 和 ResNet)中提供的几种标准(预训练)架构来执行图像分类任务。我想知道如何将输入 channel 的数量概括为 3 个以上(
我有一个 html 文档,当 URL 长度小于 30 个字符时,我想隐藏其中的一些 id(在本例中为 id="test")。 var test = document.getElementById('t
我有一个以 Qtreewidget(有 3 列)作为中央小部件的主窗口。我想保持第一列和第二列的大小固定,但第二列的大小应等于 qtreewidget 的大小减去其他两列的大小。既然主窗口(也就是树形
我的问题类似于this一。我想知道是否存在一个 PDA,它以随机顺序接受包含 a、b 和 c 的任何单词,其中 a 的总量高于 b 的总量并高于 c 的总量,例如单词“abcacba”将被接受。 最佳
我正在尝试使用准备好的 PDO 语句执行 while 循环,但我只希望它在有任何行时执行。目前我正在使用它,但它似乎缺少第一个结果,大概是因为它移动了指针。 正确的做法是什么? $stmt = $pd
1.实体(表)CurrentyEnitiy.java @Entity(tableName = "Corona") public class CurrentyEntity { @PrimaryKey(a
我是一名优秀的程序员,十分优秀!