不同的结果SecTrustEvaluate针对不同的政策

问题描述:

我没有在什么情况下,下面的情况发生(代码片段从AFSecurityPolicy.m,AFPublicKeyForCertificate功能,AFNetwork框架)了解一个证书:不同的结果SecTrustEvaluate针对不同的政策

policy = SecPolicyCreateBasicX509(); 
AF_Require_noErr(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); 
AF_Require_noErr(SecTrustEvaluate(allowedTrust, &result), _out); 
//result = 5 (kSecTrustResultRecoverableTrustFailure) 

//different policy 
policy = SecPolicyCreateSSL(true, (__bridge CFStringRef)@"www.MySite.com"); 
AF_Require_noErr(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); 
AF_Require_noErr(SecTrustEvaluate(allowedTrust, &result), _out); 
//result = 4 (kSecTrustResultUnspecified) 

证书有效期并没有过期。签名算法SHA-1。不明白为什么它会返回kSecTrustResultRecoverableTrustFailure而不是kSecTrustResultUnspecified for SecPolicyCreateBasicX509

请仔细阅读Apple's documentation for Certificate, Key, and Trust Services

的SecTrustEvaluate功能通过验证其签名加在其证书链中的证书,到锚证书的签名,根据一个或多个策略验证证书列入信任管理对象。

作为一项规则,你应该如下处理各种返回值:

  • kSecTrustResultUnspecified评价 - 成功地达到了(隐含信任)锚证书没有任何评估失败,但从来没有遇到过任何明确说明,用户信任偏爱。这是最常见的返回值。
  • kSecTrustResultRecoverableTrustFailure - 这意味着你不应该信任链,但是可以通过对评估上下文进行一些小改动来信任该链,比如忽略过期证书或向可信锚定集添加附加锚点。
+0

谢谢你的回答,但我认为你没有明白我的意思。 SecPolicyCreateSSL比SecPolicyCreateBasicX509更强大,因为x509可以做什么并且还可以进行主机名验证。但我不明白为什么更强大的政策评估好,政策没有更好。 – 2014-10-14 09:53:54

+0

你好马特,你能指点我的任何资源,以更好地了解如何管理证书链的信任评估kSecTrustResultRecoverableTrustFailure返回代码?特别是我无法理解如何验证证书是否过期(以及哪一个在链中)并最终忽略它。 – valeCocoa 2017-04-06 13:21:11