Intereting Posts
Возможно ли заблокировать исходящие SMS? MotionEvent.ACTION_UP не работает Android Создайте учетную запись Sip Programmatically Twitter4j getOAuthRequestToken () с ошибкой обратного вызова на Android? Сегментация Ошибка при попытке установить уровень заряда батареи в эмуляторе Android Android – значение по умолчанию в editText Включить «Использовать сетевые значения» программно в android Boolean java.lang.String.equals (java.lang.Object) 'на ошибке ссылки на нулевой объект в ParseFacebookUtils.logInWithReadPermissionsBackground BitmapFactory.decodeFile из памяти с изображениями 2400×2400 Как предотвратить закрытие диалогового окна при нажатии кнопки Анимированная пунктирная граница в Android Android – Как проверить, включен ли параметр разработчика Плавающая кнопка действия, прикрепленная якорем, не скрывающаяся при прокрутке элементов RecyclerView медленно Отключить menubutton в эмуляторе Android Программно переключение мобильных данных на Android 4.4.2

Получать и проверять сертификат с сервера HTTPS – андроид

Я звоню в веб-службу от моего клиента android через https. Я должен проверить получение сертификата со стороны сервера. Как мне это сделать ? В настоящее время это мой код, который я использую для вызова веб-службы.

private static String SendPost(String url, ArrayList<NameValuePair> pairs) { // url = "https://....." errorMessage = ""; String response = ""; DefaultHttpClient hc=new DefaultHttpClient(); ResponseHandler <String> res=new BasicResponseHandler(); HttpPost postMethod=new HttpPost(url); try { postMethod.setEntity(new UrlEncodedFormEntity(pairs)); response = hc.execute(postMethod, res); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return response; } 

Как проверить подлинность самозаверяющего сертификата, полученного от сервера во время выполнения сообщения? Я должен пройти тестирование с помощью общедоступных / закрытых ключей. У клиента будет файл CA. Просто нужно, чтобы клиент проверял сертификат сервера с помощью CA, сервис является общедоступным. Это связано с открытым / закрытым ключом. Как я могу получить сертификат с сервера перед вызовом сообщения?

Их несколько вариантов и фрагментов кода, доступных в stackoverflow. Несколько ссылок, которые я нашел с несколькими ответами: Прием сертификата для HTTP на Android HTTPS GET (SSL) с Android и самозаверяющим сертификатом сервера

Но я не могу понять, что хорошо / применимо для меня! Я не хочу отключать все или принимать любые. Необходимо проверить общедоступные / закрытые ключи /

Любая помощь высоко ценится.

Боб Ли написал хорошее сообщение в блоге о том, как использовать SSL-сертификаты с Android. Я думаю, что это применимо к вашему делу: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

Вам просто нужно создать KeyStore содержащий ваш самозаверяющий сертификат, и использовать пользовательскую реализацию HttpClient описанную в этом сообщении.


ОБНОВИТЬ:

Проверка имени хоста может быть X509HostnameVerifier путем установки пользовательского X509HostnameVerifier на SSLSocketFactory . Некоторые AllowAllHostnameVerifier уже доступны в android: AllowAllHostnameVerifier , BrowserCompatHostnameVerifier , StrictHostnameVerifier

 /* ... */ public class MyHostnameVerifier extends AbstractVerifier { boolean verify(String hostname, SSLSession session) { X509Certificate[] chain = session.getPeerCertificateChain(); /* made some checks... */ return checked; } } sslSocketFactory.setHostnameVerifier(new MyHostnameVerifier());