iOS:如何调试kSecTrustResultRecoverableTrustFailure

问题描述 投票:4回答:1

我现在已经阅读了很多文章和资料,但是找不到确切的答案。

我在kSecTrustResultRecoverableTrustFailure通话中收到SecTrustEvaluate(),我想弄清楚为什么会这样(即,我想弄清楚信任链验证的确切位置以及失败原因)。在OSX上似乎有一些名为SecTrustGetResult的相关功能,但是即使在OSX上也已不推荐使用此功能

如何确定验证失败的地方?我可以使用私有API,因为我仅在调试过程中才使用它,以了解内部到底发生了什么。

感谢

macos openssl nsurlconnection nsurlsession keychain
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.