我发现下面的代码:https://github.com/roddi/ValidateStoreReceipt/blob/master/validatereceipt.m这在MacOS访问苹果的根证书在iOS
加载根证书(“苹果根CA”),我试图使它在iOS上正常工作。
我们的代码是用C++编写的,使用OpenSSL在使用SSL套接字时验证远程对等体。
在其他平台上,我们加载根证书并使用X509_STORE_add_cert将它们添加到上下文中。
然后我们使用SSL_get_peer_certificate并验证主机名。这些不是自签名证书,这就是我们为什么要使用设备的根证书的原因。
我的问题是如何获得iOS设备上的根证书?
编辑:
我试过下面的查询,但我不断收到-25300(errSecItemNotFound)。
NSDictionary* query=[NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kSecClassCertificate,kSecClass,
kCFBooleanTrue,kSecReturnRef,
kSecMatchLimitAll,kSecMatchLimit,
kCFBooleanTrue,kSecMatchTrustedOnly,
nil];
SecItemCopyMatching((__bridge CFDictionaryRef)query,&ref);
我试过了,但我没有得到任何匹配(请检查我的编辑)。 – 2012-04-09 14:26:43
对不起; Mac OS X在大脑中。在iOS中,除了应用程序钥匙串以外,您无权访问任何钥匙串。所以你不能从设备上获得证书列表。您可以使用我链接的列表(HT5012)来查找设备上的正常情况,但它不提供完整的证书。通常情况下,您不需要“任何”根目录,只需要根证书,以便您可以直接发布这些根目录。但是,除此之外,您可以从Mac导出证书并将其与您的产品一起发货,或者您可以使用上述第二种方法。 – 2012-04-09 14:46:48
问题是用户不会连接到我的服务器,而是连接到其他服务器,并且我想验证它是否具有有效的SSL证书(我无法预先预测哪个是我要验证根证书的原因) 。无论如何,我想我会尝试第二种方法,并在可能的情况下切换我的代码以使用本地呼叫,这将为我处理SSL验证。谢谢。 – 2012-04-09 17:58:54