2

调用SecTrustEvaluateWithError()我的SecTrustRef对象时,API 总是返回kSecTrustResultRecoverableTrustFailure. 根据头文件,这意味着:

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

作为可覆盖的,我使用应用程序更改了不受信任的证书的信任设置,Keychain Access如下所示:

在此处输入图像描述

然而这似乎没有什么区别,结果仍然是kSecTrustResultRecoverableTrustFailure,那我做错了什么?

4

1 回答 1

2

原来问题是调用引起的SecTrustSetAnchorCertificates(),我是在调用之前添加自己的CA证书的SecTrustEvaluateWithError()

同时弃用的函数SecTrustEvaluate()在文档中包含一个重要说明:

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

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

虽然文档中缺少此注释SecTrustEvaluateWithError(),但它也适用于此函数以及SecTrustEvaluateAsyncWithError(). 如果我确保SecTrustSetAnchorCertificates()永远不会调用它,则用户覆盖按预期工作(使用该覆盖,证书被系统视为信任,没有它不是,这是预期的行为)。

于 2019-11-13T12:43:54.250 回答