Macos 始终获取kSecTrustResultRecoverableTrustFailure,即使在更改密钥链访问中的信任设置后也是如此
在我的Macos 始终获取kSecTrustResultRecoverableTrustFailure,即使在更改密钥链访问中的信任设置后也是如此,macos,certificate,keychain,security-framework,Macos,Certificate,Keychain,Security Framework,在我的SecTrustRef对象上调用SecTrustEvaluateWithError()时,API总是返回kSecTrustResultRecoverableTrustFailure。根据头文件,这意味着: 指示用户可以覆盖的信任策略失败。此值可由SecTrustEvaluate函数返回,但不作为用户信任设置的一部分存储 由于可以覆盖,我使用Keychain Accessapp更改了不受信任证书的信任设置,如下所示: 然而,这似乎没有什么区别,结果仍然是ksectrustsresultre
SecTrustRef
对象上调用SecTrustEvaluateWithError()
时,API总是返回kSecTrustResultRecoverableTrustFailure
。根据头文件,这意味着:
指示用户可以覆盖的信任策略失败。此值可由SecTrustEvaluate
函数返回,但不作为用户信任设置的一部分存储
由于可以覆盖,我使用Keychain Access
app更改了不受信任证书的信任设置,如下所示:
然而,这似乎没有什么区别,结果仍然是
ksectrustsresultrecoverabletrustfailure
,那么我做错了什么?结果表明问题是由调用SecTrustSetAnchorCertificates()
引起的,在调用SecTrustSetAnchorCertificates()之前,我使用它添加自己的CA证书
同时,不推荐使用的函数SecTrustEvaluate()
在文档中包含一个重要注释:
作为例外,如果您的应用程序以前调用过SecTrustSetAnchorCertificates
,将忽略用户指定的信任设置,并且证书链必须包含指定的锚证书之一
资料来源:
虽然SecTrustEvaluateWithError()
文档中缺少此注释,但它也适用于此函数以及sectrustEvaluateSyncWithError()
。如果我确保从不调用SecTrustSetAnchorCertificates()
,则用户覆盖按预期工作(有了该覆盖,证书被系统视为受信任,没有它则不受信任,这是预期行为)