我现在已经阅读了很多文章和资料,但是找不到确切的答案。
我在kSecTrustResultRecoverableTrustFailure
通话中收到SecTrustEvaluate()
,我想弄清楚为什么会这样(即,我想弄清楚信任链验证的确切位置以及失败原因)。在OSX上似乎有一些名为SecTrustGetResult
的相关功能,但是即使在OSX上也已不推荐使用此功能
如何确定验证失败的地方?我可以使用私有API,因为我仅在调试过程中才使用它,以了解内部到底发生了什么。
感谢
仅在调用SecTrustCopyProperties()
后使用SecTrustEvaluate()
:
SecTrustRef trust = ...;
SecTrustResultType trustResult = kSecTrustResultOtherError;
OSStatus status = SecTrustEvaluate(trust, &trustResult);
if (trustResult == kSecTrustResultRecoverableTrustFailure) {
NSArray * trustProperties = (__bridge_transfer id)
SecTrustCopyProperties(certTrust);
}
trustProperties
是字典的数组,在评估的证书链中每个证书一个词典。每个词典都有一个条目title
,其中包含证书的名称;如果证书未评估,则它还包含一个条目error
,其中包含错误。例如。如果问题是证书已过期,则error
的值将为CSSMERR_TP_CERT_EXPIRED
。