English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Проблемы адаптации iOS к сертификатам HTTPS (на примере AFNetworking 3.0)

Как известно, Apple заявила, что с 2017 года будет блокировать ресурсы http и активно продвижать https

Я недавно перешел с http на https и хочу поделиться несколькими советами с теми, кто еще не начал этим заниматься

1. Подготовка сертификата

Сначала запросите у техподдержки сертификат (SSL-сертификат, обычно вам нужно сказать техподдержке, чтобы сделать https, затем попросите сертификат, и они поймут), нам нужен сертификат в формате .cer. Но техподдержка может дать нам сертификат в формате .crt. Нам нужно преобразовать его: откройте терминал -> перейдите в папку с сертификатом.crt -> введите openssl x509 -in ваш_сертификат.crt -out ваш_сертификат.cer -outform der, сертификат готов, перетащите его в проект, не забудьте выбрать опцию copy.

2. Создайте новый класс или метод класса

Следующий код заимствован, автор himself поместил его в класс под названием FactoryUI

//Поддержка https
+ (AFSecurityPolicy *)customSecurityPolicy
{
  //Сначала импортируется сертификат, находит путь к сертификату
  NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"Ваше имя сертификата" ofType:@"cer"];
  NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  //AFSSLPinningModeCertificate использует режим проверки сертификата
  AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  //allowInvalidCertificates позволяет ли использовать недействительные сертификаты (например, собственные сертификаты), по умолчанию NO
  //Если необходимо проверять собственный сертификат, его следует установить в YES
  securityPolicy.allowInvalidCertificates = YES;
  //validatesDomainName требует ли проверки доменного имени, по умолчанию YES;
  //Если доменное имя сертификата не совпадает с запрашиваемым доменным именем,该项 следует установить в NO; если установлено NO, то сервер может устанавливать соединение с сертификатом другой доверенной организации, что очень опасно, рекомендуется включить.
  //Установлено NO,主要用于 такие случаи: клиент запрашивает поддомен, а сертификат - другой домен. Поскольку доменное имя SSL-сертификата является независимым, если зарегистрировано доменное имя www.google.com, то mail.google.com не может быть проверено; конечно, можно зарегистрировать доменное имя с подстановочным знаком *.google.com, но это довольно дорого.
  //Если установлено NO, рекомендуется добавить свою логику проверки доменного имени.
  securityPolicy.validatesDomainName = NO;
  NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
  securityPolicy.pinnedCertificates = set;
  return securityPolicy;
}

3. Изменение запросов AFNetWorking (например, AFNetworking 3.0)

  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  manager.requestSerializer.timeoutInterval = 5.0;
  [manager setSecurityPolicy:[FactoryUI customSecurityPolicy]]; // Как упоминалось в разделе 2, метод класса FactoryUI

 Следующее все еще такое же

Дополнение: все еще нужно установить настройки App Transport Security

Это все, что есть в этой статье, надеюсь, это поможет вам в изучении, и希望大家多多支持呐喊教程。

Декларация: контент этой статьи взят из Интернета, авторские права принадлежат их владельцам, контент предоставлен пользователями Интернета в порядке самостоятельного участия и загрузки, этот сайт не имеет права собственности, не был обработан вручную, и не несет ответственности за связанные с этим юридические обязательства. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении, и предоставьте соответствующие доказательства. При подтверждении факта нарушения, этот сайт немедленно удалят涉嫌侵权的内容。

Вам может понравиться