Как прокси-запросы на api.twitter.com, включая SSL-сертификаты?

Я использую новый Fabric SDK для Android для Android. Я настроил Чарльза в качестве прокси-сервера на моем Mac, поэтому я могу анализировать полезную нагрузку JSON в ответах API.

Прокси SSL в Чарльз включен и предоставляется для моего тестового устройства.

Тем не менее, Чарльз показывает мне следующую ошибку для любого запроса в Twitter:

URL https://api.twitter.com

Состояние не выполнено

Ошибка SSLHandshake: полученное фатальное предупреждение: certificate_unknown

Logcat показывает мне:

retrofit.RetrofitError: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:306) at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:241) at com.squareup.okhttp.Connection.connect(Connection.java:158) at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:174) at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120) Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318) at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:209) at io.fabric.sdk.android.services.network.PinningTrustManager.checkSystemTrust(PinningTrustManager.java:117) at io.fabric.sdk.android.services.network.PinningTrustManager.checkServerTrusted(PinningTrustManager.java:160) 

Мне кажется, что мне нужно доверять некоторым сертификатам … Любые идеи?

В SDK Fabric используется SSL-сертификат, который позволяет напрямую разговаривать с серверами Twitter. К сожалению, это означает, что вы не сможете просматривать трафик между Fabric и бэкэндом Twitter .

Как правило, стандартный SSL просто требует, чтобы данный сертификат был «доверенным». Вот почему вы можете доверять сертификату Charles в своем эмуляторе или на своем тестовом устройстве, а затем сетевой стек не будет жаловаться. Однако, когда библиотека использует привязку сертификата SSL, она не будет доверять только доверенному сертификату, а только определенному набору сертификатов. Поэтому, несмотря на то, что ваш эмулятор видит доверенный сертификат Чарльза, библиотека Twitter будет терпеть неудачу, если не увидит фактический сертификат API Twitter. См. Больше https://www.infinum.co/the-capsized-eight/articles/securing-mobile-banking-on-android-with-ssl-certificate-pinning

Если вам нужно увидеть трафик, вам нужно будет использовать библиотеку Twitter, которая не использует SSL-сертификат.

Intereting Posts
RestAdapter (дооснащение) не разрешается в android Как автоматически обновлять постоянно действующее приложение для Android без взаимодействия с пользователем Kotlin-андроид: нерешенные ссылки привязки данных Что такое dexopt? (Команда Android Shell) HttpURLConnection setConnectTimeout () не влияет Как подсчитать скорость, основанную на шагах Запрос таблицы с подклассами Используются ли настройки прокси-сервера Android для всех приложений на устройстве? Может ли собственный код вызвать повреждение памяти в Java-коде в Android? Как анализировать входящие SMS на Android? Ошибка приложения при запуске из-за java.lang.IllegalArgumentException: column '_id' не существует Mapview getLatitudeSpan и getLongitudeSpan не работают MoveCamera и animateCamera не работают во второй раз Группировка нескольких из множества исходных кодов, имеющих точно такую ​​же конфигурацию Укажите канал (или частоту) для сканирования Wi-Fi в Android