фон
При использовании программного обеспечения для захвата пакетов (например, Чарльза) для захвата https-запроса APP, и Android, и Charles установили сертификат правильно, но захват пакетов не проходит, и сообщается об ошибке:
Клиентское SSL-рукопожатие не удалось: возникла неизвестная проблема при обработке сертификата (certificate_unknown)
Причина
После Android 7.0 сертификат CA, добавленный в систему по умолчанию, не считается доверенным:
Чтобы обеспечить более последовательный и безопасный опыт во всей экосистеме Android, начиная с Android Nougat, совместимые устройства доверяют только стандартизированным системным CA, поддерживаемым в AOSP .
Ссылка на документацию:https://android-developers.googl ... ed-certificate.html
Это означает, что для приложений на базе SDK24 и выше, даже если у вас установлен сертификат инструмента захвата пакетов на телефоне, вы не сможете захватывать https-запросы.
решение
1. Официальное решение (требуется изменение кода)
Официальная документация:https://developer.android.google ... ecurity-config.html Подробная демонстрация:https://blog.csdn.net/mrxiagc/article/details/75329629
2. Установить сертификат программного обеспечения захвата пакетов в виде системного сертификата (требуется ROOT)
Каталог системных сертификатов: /system/etc/security/cacerts/
Конвенция наименования каждого сертификата следующая:
<Certificate_Hash>. <Number> Имя файла — это хеш-значение, а суффикс — число.
Имя файла можно вычислить с помощью следующей команды:
Например, если хеш-значение, вычисляемое двумя сертификатами, одинаково, то номер суффикса одного сертификата можно установить как 0, а суффикс другого сертификата — на 1
Шаги:
Используйте приведённую выше команду, чтобы вычислить хеш-значение сертификата программного обеспечения для захвата пакетов, переименовать его и скопировать в каталог системных сертификатов
На данный момент вы должны увидеть свой недавно добавленный сертификат во вкладке «Системы» раздела «Настройки — > Безопасность — > Шифрование и учетные данные > Доверенные учетные данные
|