我找到了以下代码:https://github.com/roddi/ValidateStoreReceipt/blob/master/validatereceipt.m,它在MacOS上加载根证书('Apple Root 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);
答案 0 :(得分:3)
你会想要这些内容:
SecItemCopyMatching()
查找证书,kSecMatchTrustedOnly
设置为kCFBooleanTrue
。请记住,这将是a lot of certificates,而不仅仅是一个。SecCertificateCopyData()
将其导出为DER格式。或者,你可以采取另一种方式:
SecCertificateRef
SecCertificateCreateWithData()
SecPolicyRef
SecPolicyCreateSSL()
SecTrustRef
SecTrustCreateWithCertificates()
SecTrustEvaluate()
当然,您也可以使用NSURLConnection
或CFNetwork
(直接在C ++中使用)管理SSL连接,系统会自动为您完成所有操作。只要有可能,我建议不要在iOS上使用OpenSSL,因为它会产生很多复杂性。但如果你需要,上述内容可以帮助你弥补。
答案 1 :(得分:1)
分发证书有多种方法。使用电子邮件 - 将证书作为附件发送,点击它将启动安装过程。或者使用浏览器 - 将Safari导航到托管证书的页面,下载并安装。您还可以使用配置配置文件来简化部署。
在iPad in Business中详细了解相关内容,向下滚动至Distributing and Installing Certificates
部分。
编辑:证书查询
要查找钥匙串项,您可以使用提供kSecClassCertificate
和kSecAttrLabel
的{{3}}。 SecItemCopyMatching