iOS-управление доверенными корнями в SSL-соединении
Добавив в словарь kCFStreamPropertySSLSettings обычные kCFStreamSSLValidatesCertificatechain, kCFStreamSSLAllowsAnyRoot и т. д.-Я могу заставить работать аутентификацию сервера и клиента.
Однако я не вижу, как я могу сделать это более мелкозернистым; т. е.
- обнаружьте сертификат сервера / CA, который никогда не видели , и увеличьте принятие до пользователя.
- проверка сертификата сервера, к которому я подключен, по узкому списку доверия (например, сертификат, о котором узнали во время предыдущее подключение).
Т. е. то, что я ищу-это 1) что-то вроде SSLSetTrustedRoots() на MacOSX и 2) что-то вроде ошибки/домен обратные вызовы в kCFStreamErrorDomainSSL (например errSSLPeerCertUnknown) - ни одного, который, похоже, определенными/доступный на iPad и iPhone 4.2.1.
Или я что-то упустил ? Или мне нужно сделать что-то явное на обратном вызове ? Примеры оценены (пример AdvancedURLConnections не совсем применим - у меня есть raw (IRC) разъем).
Спасибо,
Dw.
1 ответ:
Установите kcfstreamslvalidatescertificatechain в kBooleanFalse и вручную проверьте сертификат с помощью API.
В частности, используйте
SecTrustCreateWithCertificates
С сертификатами, которые вы получаете от
CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates);
Тогда вы можете использовать
SecTrustSetAnchorCertificates
И, наконец, вызовите
SecTrustEvaluate