iOS:如何调试kSecTrustResultRecoverableTrustFailure

时间:2014-08-25 16:01:52

标签: macos openssl nsurlconnection nsurlsession keychain

我现在已阅读了不少帖子和来源,但找不到明确的答案。

我在kSecTrustResultRecoverableTrustFailure电话上收到了SecTrustEvaluate(),我想弄明白为什么会这样(也就是说我想弄清楚信任链验证失败的原因和原因)。在OSX上似乎有一些名为SecTrustGetResult的相关函数,但现在即使在OSX上也不推荐使用

如何确定验证失败的位置?我很喜欢使用私有API,因为我只在调试期间使用它来了解内部究竟发生了什么。

感谢

1 个答案:

答案 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