在我的SecTrustEvaluateWithError()
对象上调用SecTrustRef
时,API始终返回kSecTrustResultRecoverableTrustFailure
。根据头文件,这意味着:
表示可被用户覆盖的信任策略失败。此值可以由
SecTrustEvaluate
函数返回,但不能存储为用户信任设置的一部分。
可重写,我使用Keychain Access
应用更改了不受信任证书的信任设置,如下所示:
但这似乎没有什么区别,结果仍然是kSecTrustResultRecoverableTrustFailure
,所以我在做什么错了?
答案 0 :(得分:1)
事实证明,此问题是由调用SecTrustSetAnchorCertificates()
引起的,我曾经在调用SecTrustEvaluateWithError()
之前添加了自己的CA证书。
同时不建议使用的功能SecTrustEvaluate()
在文档中包含一个重要说明:
作为例外,如果您的应用先前已调用
>SecTrustSetAnchorCertificates
,则用户指定的信任设置将被忽略,并且证书链中必须包含指定的锚证书之一。
来源:https://developer.apple.com/documentation/security/1394363-sectrustevaluate
尽管SecTrustEvaluateWithError()
文档中缺少此注释,但它也适用于此功能以及SecTrustEvaluateAsyncWithError()
。如果我确定从未调用过SecTrustSetAnchorCertificates()
,那么用户覆盖将按预期方式工作(通过该覆盖,该证书被认为是系统信任的证书,如果没有,则为预期行为)。