即使更改了钥匙串访问中的信任设置,也始终会出现kSecTrustResultRecoverableTrustFailure

时间:2019-11-13 12:43:54

标签: macos certificate keychain security-framework

在我的SecTrustEvaluateWithError()对象上调用SecTrustRef时,API始终返回kSecTrustResultRecoverableTrustFailure。根据头文件,这意味着:

  

表示可被用户覆盖的信任策略失败。此值可以由SecTrustEvaluate函数返回,但不能存储为用户信任设置的一部分。

可重写,我使用Keychain Access应用更改了不受信任证书的信任设置,如下所示:

enter image description here

但这似乎没有什么区别,结果仍然是kSecTrustResultRecoverableTrustFailure,所以我在做什么错了?

1 个答案:

答案 0 :(得分:1)

事实证明,此问题是由调用SecTrustSetAnchorCertificates()引起的,我曾经在调用SecTrustEvaluateWithError()之前添加了自己的CA证书。

同时不建议使用的功能SecTrustEvaluate()在文档中包含一个重要说明:

  

作为例外,如果您的应用先前已调用SecTrustSetAnchorCertificates,则用户指定的信任设置将被忽略,并且证书链中必须包含指定的锚证书之一。

>

来源:https://developer.apple.com/documentation/security/1394363-sectrustevaluate

尽管SecTrustEvaluateWithError()文档中缺少此注释,但它也适用于此功能以及SecTrustEvaluateAsyncWithError()。如果我确定从未调用过SecTrustSetAnchorCertificates(),那么用户覆盖将按预期方式工作(通过该覆盖,该证书被认为是系统信任的证书,如果没有,则为预期行为)。