Я пытаюсь создать HttpClient , который может проверять сертификат SSL после каждого рукопожатия TLS и перед получением / отправкой любых других данных.
Таким образом, поток будет выглядеть следующим образом:
- Создать HttpClient
- Выполнить запрос
- Клиент подключается к хосту через HTTPS
- После того, как рукопожатие TLS было выполнено, клиент теперь знает сертификат
- Передать сертификат в обратный вызов. Выполнить фактический запрос, когда обратный вызов завершится успешно, в противном случае прервать запрос
- В случае, если обратный вызов был успешным, действуйте как обычно (например, передайте ответ et c.)
Я искал в SecurityContext уже. Проблема в том, что он проверяет только фиксированный набор сертификатов, но я хочу проверять сертификат динамически на основе сертификата, отправленного хостом. Кроме того, я увидел, что в HttpClient есть метод badCertificateCallback , но он не подходит для моего использования, поскольку я хочу проверять каждый сертификат, а не только недействительные / плохие.
I мне было интересно, могу ли я теоретически создать класс, который использует HttpClient в качестве суперкласса и, следовательно, изменить его поведение, но мне интересно, есть ли более элегантный способ, который не ломается так легко при изменении реализации HttpClient.
Другая моя идея - установить SecurityContext, который по умолчанию отклоняет каждый сертификат. Затем я мог бы использовать badCerificateCallback для выполнения проверок, обычно выполняемых SecurityContext (проверка по списку доверенных сертификатов), и добавить свою собственную проверку поверх этого. Кто-нибудь знает о каких-либо недостатках, которые у этого могут быть? Я немного сомневался, когда читал об ограничениях относительно iOS.
Кто-нибудь здесь делал подобные вещи раньше и мог бы мне подсказать? :)
Заранее спасибо!