Модифицированный 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 объект без использования делегата.

0 ответов

Другие вопросы по тегам