Всегда получаю kSecTrustResultRecoverableTrustFailure, даже после изменения настроек доверия в Keychain Access

При вызове SecTrustEvaluateWithError() для моего объекта SecTrustRef API всегда возвращает kSecTrustResultRecoverableTrustFailure. Согласно заголовочному файлу это означает:

Указывает на сбой политики доверия, который может быть переопределен пользователем. Это значение может быть возвращено функцией SecTrustEvaluate, но не сохранено как часть настроек доверия пользователя.

Будучи переопределяемым, я изменил настройки доверия для ненадежного сертификата с помощью приложения Keychain Access следующим образом:

введите здесь описание изображения

Но это, похоже, не имеет значения, результат по-прежнему kSecTrustResultRecoverableTrustFailure, так что я делаю неправильно?


person Mecki    schedule 13.11.2019    source источник


Ответы (1)


Оказалось, что проблема была вызвана вызовом SecTrustSetAnchorCertificates(), который я использовал для добавления собственных сертификатов ЦС перед вызовом SecTrustEvaluateWithError().

На данный момент устаревшая функция SecTrustEvaluate() содержит важное примечание в документации:

В качестве исключения, если ваше приложение ранее вызывало SecTrustSetAnchorCertificates, установленные пользователем параметры доверия игнорируются, а цепочка сертификатов должна содержать один из указанных сертификатов привязки.

Источник: https://developer.apple.com/documentation/security/1394363-sectrustevaluate< /а>

Хотя это примечание отсутствует в документации SecTrustEvaluateWithError(), оно относится и к этой функции, и к SecTrustEvaluateAsyncWithError(). Если я удостоверюсь, что SecTrustSetAnchorCertificates() никогда не вызывается, то переопределение пользователя работает должным образом (с этим переопределением сертификат считается доверенным для системы, без него - нет, что является ожидаемым поведением).

person Mecki    schedule 13.11.2019