Gil*_*vik 5 security openssl certificate keychain ios
我找到了以下代码: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);
Run Code Online (Sandbox Code Playgroud)
你会想要这样的东西:
SecItemCopyMatching()使用kSecMatchTrustedOnlyset to查找证书kCFBooleanTrue。请记住,这将是很多证书,而不仅仅是一个。SecCertificateCopyData()。或者,您也可以采用另一种方式:
SecCertificateRef与SecCertificateCreateWithData()SecPolicyRef与SecPolicyCreateSSL()SecTrustRef与SecTrustCreateWithCertificates()SecTrustEvaluate()或者当然您也可以使用NSURLConnection或 with来管理 SSL 连接CFNetwork(直接在 C++ 中可用),系统会自动为您完成所有操作。只要有可能,我建议不要在 iOS 上使用 OpenSSL,因为它会带来很大的复杂性。但如果您需要的话,上述内容应该可以帮助您建立桥梁。