Android HTTPS Запрос - PullRequest
       0

Android HTTPS Запрос

4 голосов
/ 06 октября 2011

Я перепробовал так много вариантов, что сойду с ума. Я продолжаю получать исключение SSL каждый раз, когда пытаюсь опубликовать ссылку на URL.

Это работает как сон в C # с использованием HttpWebRequest.

Я получаю следующие ошибки:

Not trusted server certificate
java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.

Сейчас я пробую следующий подход, но я попробовал пользовательские SocketFactories, все. Пожалуйста, помогите!

    final String httpsURL = "https://...";
    final DefaultHttpClient client = new DefaultHttpClient();
    final HttpPost httppost = new HttpPost(httpsURL);

    //authentication block:
    final List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
    nvps.add(new BasicNameValuePair("mail", username));
    nvps.add(new BasicNameValuePair("password", password));
    UrlEncodedFormEntity p_entity = null;
    try {
        p_entity = new UrlEncodedFormEntity(nvps, HTTP.UTF_8);
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    httppost.setEntity(p_entity);

    //sending the request and retrieving the response:
    HttpResponse response = null;
    try {
        response = client.execute(httppost, _context);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    HttpEntity responseEntity = response.getEntity();

    //handling the response: responseEntity.getContent() is your InputStream
    try {
        final InputSource inputSource = new InputSource(responseEntity.getContent());
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

1 Ответ

1 голос
/ 22 августа 2013

Необходимо учитывать, как Android определяет действительность сертификатов. Когда ему нужно проверить сертификат, он будет смотреть на цепочку подписей. Если он может найти доверенный орган в его верхней части, а сертификат отсутствует в списке отзыва, он будет доверенным.

Чтобы сократить количество запросов, требующих много времени, Android поставляется со списком распространенных ЦС, которым он доверяет. Как вы отметили в комментариях, ошибка исчезла при обновлении. Скорее всего, это связано с тем, что используемый вами ЦС был добавлен в список отправленных доверенных ЦС.

Если вы доверяете сертификату, вы можете добавить его в этот список доверенных ЦС. принятый ответ на этот вопрос содержит некоторые подробности об этой процедуре для более старых версий! Более новые версии, скорее всего, будут поставляться с необходимыми сертификатами. В более новых версиях вы можете устанавливать сертификаты прямо со своей SD-карты. Перейти к Settings -> Security. Под Credential storage вы найдете опцию Install from device storage. Пока вы используете стандартный формат, вы сможете установить свой сертификат!

Мой источник: Безопасность с HTTPS и SSL | Разработчики Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...