Macos iOS:如何调试kSecTrustResultRecoverableTrustFailure

Macos iOS:如何调试kSecTrustResultRecoverableTrustFailure,macos,openssl,nsurlconnection,nsurlsession,keychain,Macos,Openssl,Nsurlconnection,Nsurlsession,Keychain,我现在已经读了不少帖子和资料,但找不到确切的答案 在我的SecTrustEvaluate()调用中,我得到了kSecTrustResultRecoverableTrustFailure,我想弄清楚为什么会这样(即,我想弄清楚信任链验证失败的确切位置和原因)。在OSX上似乎有一些相关的函数名为SecTrustGetResult,但现在即使在OSX上也不推荐使用这种函数 我如何找出验证失败的地方?我可以使用私有API,因为我只在调试期间使用它来理解内部到底发生了什么 谢谢在调用SecTrustEva

我现在已经读了不少帖子和资料,但找不到确切的答案

在我的
SecTrustEvaluate()
调用中,我得到了
kSecTrustResultRecoverableTrustFailure
,我想弄清楚为什么会这样(即,我想弄清楚信任链验证失败的确切位置和原因)。在OSX上似乎有一些相关的函数名为
SecTrustGetResult
,但现在即使在OSX上也不推荐使用这种函数

我如何找出验证失败的地方?我可以使用私有API,因为我只在调试期间使用它来理解内部到底发生了什么


谢谢

在调用
SecTrustEvaluate()之后,只需使用
SecTrustCopyProperties()

trustProperties
是一个字典数组,对证书链中的每个证书计算一个字典。每个字典都有一个条目
title
,其中包含证书的名称,如果证书没有计算,它还包含一个条目
error
,其中包含错误。例如,如果问题是证书已过期,
error
的值将是
CSSMERR\u TP\u cert\u expired

SecTrustRef trust = ...;
SecTrustResultType trustResult = kSecTrustResultOtherError;
OSStatus status = SecTrustEvaluate(trust, &trustResult);
if (trustResult == kSecTrustResultRecoverableTrustFailure) {
    NSArray * trustProperties = (__bridge_transfer id)
        SecTrustCopyProperties(certTrust);
}