我想获取iPhone或iPad上安装的证书列表。所以我可以使用它来选择一个并在服务器上用于ssl验证。但是我无法获得此列表。 我在下面的链接中看到,在iOS中无法获取证书,因为只能访问自己的钥匙串。 iOS get Configuration Profiles that are installed
但我怀疑:)。
从以下链接 Get Certificates in Keychain 我使用代码获取证书。但是我得到了无数据。
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)(kSecClassCertificate), kSecClass,
[NSNull null], kSecMatchSearchList,
kCFBooleanTrue, kSecReturnRef,
kSecMatchLimitAll, kSecMatchLimit,
nil];
CFDataRef *items = nil;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, ((CFTypeRef *)&items));
我给搜索列表[NSNull null]假设如果keychain ref为NULL,则设备采用默认的keychain。
我的问题是 1)是否可以从iPhone获取已安装证书的列表。 2)如果是这样如何?上面的代码有什么问题?
答案 0 :(得分:5)
我的问题是1)是否可以从iPhone获取已安装证书的列表。
当然。
2)如果是这样怎么样?上面的代码有什么问题?
代码很好,就我而言(如果不是,我能想到的唯一问题是设置NSNull
- 尝试省略它)。您缺少的是使用适当的权利签署您的二进制文件,即:
<key>keychain-access-groups</key>
<array>
<string>*</string>
</array>
你可以找到一个示例Entitlements属性列表here - 顺便说一下,查看整个项目,这很有趣。
答案 1 :(得分:2)
请参阅“GenericKeychain”的Apple示例代码 - 可从“SecItemCopyMatching”文档访问。 “在钥匙串中查找证书”文档包含查找命名证书的详细代码 - 它将根据kSecAttrLabel键/值对获得一个。