7

我想获取安装在 iPhone 或 iPad 上的证书列表。所以我可以用它来选择一个并用于服务器上的 ssl 验证。但是我无法获得此列表。我在以下链接中看到,在 iOS 中无法获取证书,因为只能访问他们自己的钥匙串。iOS 获取已安装的配置文件

但是我怀疑:)。

从下面的链接 获取钥匙串中的证书 我正在使用代码来获取证书。但是我得到零数据。

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)如果是这样怎么办?上面的代码有什么问题?

4

2 回答 2

5

我的问题是 1) 是否可以从 iPhone 获取已安装证书的列表。

确实。

2)如果是这样怎么办?上面的代码有什么问题?

就我而言,代码很好(如果不是,我能想到的唯一问题就是设置它NSNull- 尝试省略它)。您缺少的是使用适当的权利对二进制文件进行签名,即:

<key>keychain-access-groups</key>
<array>
    <string>*</string>
</array>

你可以在这里找到一个示例 Entitlements 属性列表——顺便说一下,看看整个项目,这很有趣。

于 2013-02-12T15:43:16.500 回答
2

请参阅“GenericKeychain”的 Apple 示例代码 - 可从“SecItemCopyMatching”文档访问。“在钥匙串中查找证书”文档包括查找命名证书的详细代码 - 这将根据 kSecAttrLabel 键/值对为您提供一个。

于 2013-02-12T23:45:03.370 回答