2014-10-10 34 views
0

我沒有在什麼情況下,下面的情況發生(代碼片段從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

回答

1

請仔細閱讀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