我目前正在开发一个具有端到端加密的 iOS 应用程序。为了让用户相互验证,每个用户都会生成一个 x509 证书签名请求 (CSR) 并将 CSR 发送到我们的 CA 服务器进行签名。
用户可以通过验证其他用户证书是否由 CA 签署来信任其他用户。
我的问题是:
在 iPhone 上,我目前有需要验证的 CA 证书和用户证书。如何验证用户证书实际上是由 CA 签署的?
我最好的尝试是下面的代码,但它没有指定评估 clientCert 的对象,这让我感到困惑。
-(BOOL) evaluateTrust:(SecCertificateRef) clientCert{
SecPolicyRef myPolicy = SecPolicyCreateBasicX509();
SecCertificateRef certArray[1] = { clientCert };
CFArrayRef myCerts = CFArrayCreate(
NULL, (void *)certArray,
1, NULL);
SecTrustRef myTrust;
OSStatus status = SecTrustCreateWithCertificates(
myCerts,
myPolicy,
&myTrust);
SecTrustResultType trustResult;
if (status == noErr) {
status = SecTrustEvaluate(myTrust, &trustResult);
}
NSLog(@"trustresult %d", trustResult);
return trustResult == kSecTrustResultProceed || trustResult == kSecTrustResultUnspecified;
}