我现在已阅读了不少帖子和来源,但找不到明确的答案。
我在kSecTrustResultRecoverableTrustFailure
电话上收到了SecTrustEvaluate()
,我想弄明白为什么会这样(也就是说我想弄清楚信任链验证失败的原因和原因)。在OSX上似乎有一些名为SecTrustGetResult
的相关函数,但现在即使在OSX上也不推荐使用
如何确定验证失败的位置?我很喜欢使用私有API,因为我只在调试期间使用它来了解内部究竟发生了什么。
感谢
答案 0 :(得分:0)
调用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
。