ios - 如何在 iOS 上评估 x509 证书的信任度
<p><p>我目前正在开发一个具有端到端加密功能的 iOS 应用。为了让用户相互验证,每个用户都会生成一个 x509 证书签名请求 (CSR) 并将 CSR 发送到我们的 CA 服务器进行签名。</p>
<p>用户可以通过验证其他用户的证书是否由 CA 签署来信任其他用户。</p>
<p>我的问题是:</p>
<p>在 iPhone 上,我目前拥有需要验证的 CA 证书和用户证书。 <strong>我如何验证用户证书实际上是由 CA 签署的?</strong></p>
<p>我最好的尝试是下面的代码,但它没有指定评估 clientCert 的依据,这让我感到困惑。</p>
<pre><code>-(BOOL) evaluateTrust:(SecCertificateRef) clientCert{
SecPolicyRef myPolicy = SecPolicyCreateBasicX509();
SecCertificateRef certArray = { 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;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您的代码根据钥匙串(keychain)中存在的 anchor (可信根)证书评估您的 clientCert。如果您想根据您的 caCert 对其进行评估,您需要将您的 caCert 注册为 SecTrustSetAnchorCertificates 的 anchor 证书。</p>
<p>或者,您可以将您的 caCert 添加到 certArray:</p>
<pre><code>SecCertificateRef certArray = { clientCert, caCert };
CFArrayRef myCerts = CFArrayCreate(
NULL, (void *)certArray,
2, NULL);
SecTrustRef myTrust;
OSStatus status = SecTrustCreateWithCertificates(
myCerts,
myPolicy,
&myTrust);
</code></pre>
<p>查看:<a href="https://developer.apple.com/library/ios/documentation/security/conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html#//apple_ref/doc/uid/TP40001358-CH208-SW13" rel="noreferrer noopener nofollow">https://developer.apple.com/library/ios/documentation/security/conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html#//apple_ref/doc/uid/TP40001358-CH208-SW13</a> </p>
<p>它说:
4. ...如果您有证书链的中间证书或 anchor 证书,您可以将它们包含在传递给 SecTrustCreateWithCertificates 函数的证书数组中。这样做可以加快信任评估。</p></p>
<p style="font-size: 20px;">关于ios - 如何在 iOS 上评估 x509 证书的信任度,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/24013306/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/24013306/
</a>
</p>
页:
[1]