Intereting Posts
Вызывать активность при событии уведомления о клиенте Android – Как сделать телефонный звонок из webview Увеличить и перетащить изображение в Android Мультипроект android – gradle включает и исключает библиотеки ListView.setFooterView (v) Изменение нижнего колонтитула не отображается В ListView, отображаемом VIewPager Android сравнивает два звука для фонетического соответствия Как сохранить ящик уведомлений после уведомления нажмите на Android Активность Android-установки с несколькими «шагами» Как определить макет фрагмента из XML? Как перемещать Sprite в направлении Fling / Swipe (по диагонали) с помощью AndEngine Как отобразить пользовательский вид в ActionBar? Какова наилучшая первичная ключевая стратегия для онлайн-офлайнового многопользовательского мобильного приложения с базами данных SQLite и Azure SQL в качестве центрального магазина? Несколько уведомлений и только показать первый Android Удаленная отладка с Dart OnCreateView () не вызывается сразу после FragmentTransaction.commit ()

Теперь, когда SSLSocketFactory устарел на Android, какой был бы лучший способ справиться с проверкой подлинности сертификата клиента?

Я работаю над Android-приложением, для которого требуется аутентификация сертификата клиента (с файлами PKCS 12). После устаревания всего этого apache.http.* , Мы начали довольно большую работу по рефакторингу на нашем сетевом уровне, и мы решили пойти с OkHttp в качестве замены, и до сих пор мне это очень нравится.

Тем не менее, я не нашел другого способа обработать сертификат сертификата клиента без использования SSLSocketFactory , с OkHttp или что-то еще в этом отношении. Итак, каков был бы лучший курс действий в этом конкретном случае? Есть ли другой способ с OkHttp для обработки такого рода аутентификации?

    По-видимому, есть два класса SSLSocketFactory . HttpClient имеет свой собственный, и это устарело вместе с остальной частью HttpClient. Тем не менее, все остальные будут использовать более стандартную javax.net.ssl SSLSocketFactory , которая не устарела (спасибо $DEITY ).

    Если вы используете https, вам нужно использовать действительный сертификат. Как вы считаете, во время вашей стадии разработки вы должны доверять сертификату? sslSocketFactory(SSLSocketFactory sslSocketFactory) устарел и заменен на sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager) , вам нужно обновить свой файл gradle, код ниже поможет вам получить доверенный OkHttpClient, который доверяет любому сертификату ssl.

     TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init((KeyStore) null); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); } X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[] { trustManager }, null); SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory, trustManager);