iOS проверяет, установлен ли корневой сертификат * и * доверенный - PullRequest
0 голосов
/ 29 мая 2018

Наше приложение устанавливает профиль корневого ЦС, и я хочу убедиться, что он установлен и доверен пользователю.

В настоящее время это примерно то, что мы делаем (обрезали его для ядра)

SecPolicyRef policyObj = SecPolicyCreateBasicX509();
SecTrustRef trustObj;
OSStatus error = SecTrustCreateWithCertificates((__bridge CFTypeRef _Nonnull)(fullChain), policyObj, &trustObj);

SecTrustResultType result;
error = SecTrustEvaluate(trustObj, &result);

CFRelease(trustObj);
CFRelease(policyObj);

return (kSecTrustResultUnspecified == result || kSecTrustResultProceed == result);

Проблема в том, что после установки профиля результатом является либо kSecTrustResultUnspecified (iOS 10 ~), либо kSecTrustResultProceed (iOS 11 ~), но я хочу проверить, доверял ли он пользователю (в разделе General-> About-> TrustНастройки)

Я покопался в документах Apple и ничего не нашел, более того, в документе SecTrustEvaluate указано, что возвращаемое значение «продолжить» означает, что пользователь доверял сертификату.

proceed— The user explicitly chose to trust a certificate in the chain (usually by clicking a button in a certificate trust panel).

У кого-нибудь есть идеи, как это можно сделать?что мне не хватает?

1 Ответ

0 голосов
/ 10 июня 2018

Итак, покопавшись, я обнаружил, что SecPolicyCreateSSL работает, как и ожидалось, но не на 100%, почему SecPolicyCreateBasicX509 не работает.

Так что для будущих ссылок, если у кого-то есть эта проблема, это то, что мы сделали вместо этого,

SecPolicyRef policy = SecPolicyCreateSSL(true, NULL);
SecTrustRef testTrust;

OSStatus status = SecTrustCreateWithCertificates((__bridge CFArrayRef)fullChain, policy, &testTrust);
status = SecTrustEvaluate(testTrust, &trustResult);

CFRelease(testTrust);
CFRelease(policy);

return (status == errSecSuccess) && (kSecTrustResultUnspecified == trustResult || kSecTrustResultProceed == trustResult);;

(в основном вместо этого используется SecPolicyCreateSSL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...