У нас странная ситуация. При настройке соединения наше приложение выполняет кучу проверок безопасности. Один из них - проверить правильность длины цепи. Мы знаем, что это должно быть 3: Корень, промежуточный и сервер.Длина цепи сертификата не действительна
Когда мы подключаемся к серверу с помощью приложения для Android, мы получаем в качестве ответа только два промежуточных сертификата и сервера - без root. Но когда мы проводим проверку веб-браузера, мы придумали исследование на Android 5.0, которое мы видим 3, а на Android 4.3 мы видим два из них. Форма подключения iOS дает 3 сертификата.
Это сервер или Android? Что мы можем сделать, чтобы получить также корневой сертификат?
EDIT: Мы загружаем сертификаты (root и intermediate) из браузера и создаем хранилище ключей из них и помещаем его в активы приложения. Затем в нашем CustomTrustManager мы сравниваем сертификаты из хранилища ключей с сертификатами, которые поступают с подключаемого нами сервера.
В основном наше сравнение основано на сертификатах отпечатков пальцев. Проблема в том, что корневой сертификат не поступает с сервера, и нет возможности его сравнить.
Но мы вышли с идеей.
Мы можем сравнить, что промежуточный ceritifcate, который пришел с сервера, подписан корневым сертификатом, который кодируется в приложении.
Я думаю, что это достаточно безопасно.
И мы будем сравнивать только промежуточные отпечатки пальцев.
Мы загружаем сертификаты (root и intermediate) из браузера и создаем хранилище ключей из них и помещаем их в активы приложения. Затем в нашем CustomTrustManager мы сравниваем сертификаты из хранилища ключей с сертификатами, которые поступают с сервера . В принципе, наше сравнение основано на сертификатах отпечатков пальцев. Проблема в том, что корневой сертификат не поступает с сервера, и нет возможности его сравнить. – elon
@elon: непонятно, почему вы вообще что-то делаете. Установленный способ проверить, что вы подключены к ожидаемому серверу, заключается в проверке сертификата сервера или его открытого ключа, то есть [сертификата или открытого ключа] (https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning). Если сертификат сервера взломан, злоумышленник может также включать в себя все сертификаты цепей, поскольку они являются общедоступными, поэтому не стоит сравнивать их. –