Модифицированный URLSession.shared для реализации закрепления сертификата, как они это сделали?
В моем проекте мы используем фреймворк с закрытым исходным кодом ( Backbase, если вы хотите знать). Это гибридная прикладная среда, которая предлагает множество вариантов безопасности "из коробки". Одним из них является закрепление сертификата, и я весьма заинтригован его реализацией.
Нам нужно только установить свойство в файле конфигурации и все. Каждый запрос выполняется через URLSession.shared
обрабатывается через каркас, и закрепление эффективно. Однако, если я создаю свою собственную URLSession
то закрепление неэффективно. Но я также могу сделать эффективный пиннинг на новом URLSession
создавая его с помощью фреймворка NSURLSessionConfiguration
,
Для тех, кто только читает код:
// Pinning effective
URLSession.shared.dataTask(with: request, completionHandler: completion)
// Pinning not effective
URLSession(configuration: .default).dataTask(with: request, completionHandler: completion)
// Pinning effective
URLSession(configuration: ShinnyFramework.getConfiguration()).dataTask(with: request, completionHandler: completion)
Для меня, URLSession.shared
является неизменным, поэтому было невозможно изменить его работу. И для реализации пиннинга единственным способом было создать новый URLSession
с обычаем URLSessionDelegate
,
Мой вопрос: что они сделали, чтобы получить такое поведение? Метод извергает, Иса извергает, что-то еще?
Изменить: я не ищу подробное объяснение о том, как реализовать закрепление сертификатов. Больше всего меня интересует, как редактировать предположительно неизменное статическое свойство и как настроить поведение URLSession
объект без использования делегата.