Как проверить безопасность SSL-сертификата в iOS? - PullRequest
6 голосов
/ 23 февраля 2012

Я хочу проверить, присутствует ли сертификат SSL в URL, также хочет проверить его версию и тип проверки.

Я создал приложение, в котором я вызываю методы делегата NSURLConnection для отправки запроса через сервер..

Также используется метод "canAuthenticateAgainstProtectionSpace" , но этот метод не вызывается после установления соединения.

Может кто-нибудь сказать мне, как этого добиться.

1 Ответ

9 голосов
/ 23 февраля 2012

iOS не дает вам очень детального доступа к информации о сертификате. У вас есть два варианта: частные API или создать свой собственный оценщик с OpenSSL.

Вы можете увидеть функции частного сертификата в коде с открытым исходным кодом . Версия доступна от SecCertificateVersion(). Я не уверен, что вы подразумеваете здесь под «типом проверки».

Чтобы сделать это с OpenSSL, вы можете получить данные DER с помощью SecCertificateCopyData(), а затем проанализировать все самостоятельно.

Я предлагаю открыть радар (bugreporter.apple.com) по этому вопросу. Отсутствие доступа к основной информации о сертификате является серьезной проблемой.

Если вы ищете пример кода, который извлекает сертификат из NSURLConnection, см. Глава 11 пример кода из iOS: PTL :

- (void)connection:(NSURLConnection *)connection
  willSendRequestForAuthenticationChallenge:
  (NSURLAuthenticationChallenge *)challenge
{
  NSURLProtectionSpace *protSpace = challenge.protectionSpace;
  SecTrustRef trust = protSpace.serverTrust;
  ...
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0);
  ...

На данный момент cert содержит ваш листовой сертификат.

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