Как я могу подключиться к Http-серверу с помощью Basic Auth через SSL на Android?

Я знаю, что этот вопрос задавался раньше, но ни один из ответов, которые я нашел, не помогает мне. Я пытаюсь подключиться к простой службе входа в систему через SSL с помощью Basic Http Auth. Служба размещена по адресу https://localhost:8443/login. Когда я запускаю службу из браузера (в Windows, OSX и Android), она работает нормально, я ввожу свое имя пользователя и пароль, и я правильно аутентифицируюсь. Однако, когда я пытаюсь сделать это с помощью кода на своем Xoom, я получаю исключение ClientProtocolException, в котором говорится, что «серверу не удалось ответить действительным ответом HTTP». Может ли кто-нибудь дать мне толчок в правильном направлении? Вот мой код

        String result = null;

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
        HttpProtocolParams.setUseExpectContinue(params, true);

        SchemeRegistry schReg = new SchemeRegistry();
        schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
        ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);

        DefaultHttpClient client = new DefaultHttpClient(conMgr, params);

        HttpGet get = new HttpGet(preferences.getString(getString(R.string.Security_Login_URL),
        "https://localhost:80/login"));

        String credentials = Base64.encodeToString((username + ":" + password).getBytes(), Base64.URL_SAFE);
        if(credentials!=null){
        get.addHeader("Authorization","Basic "+credentials);
        ResponseHandler responseHandler=new BasicResponseHandler();
        try {
            result = client.execute(get, responseHandler);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

person beyerss    schedule 30.03.2011    source источник


Ответы (1)


Это может быть вызвано двумя распространенными проблемами:

  1. Вы не должны выполнять БАЗОВУЮ аутентификацию самостоятельно. Apache HttpClient имеет все функции, уже включенные для выполнения BASIC-аутентификации. Посмотрите либо Basic Authentication или упреждающий ОСНОВНАЯ аутентификация

  2. Ваше устройство Android доверяет сертификату с сервера? Когда ваш браузер доверяет сертификату, это не означает, что ваше устройство также доверяет ему. Android имеет очень ограниченный список доверенных центров сертификации. Вы можете проверить это со своего устройства, зайдя на сайт во встроенном браузере Android. Если предупреждающее сообщение не появляется, все должно быть в порядке. Для получения дополнительной информации о доверии дополнительным сертификатам с устройства Android вы можете посмотреть мой статья в блоге.

Наслаждаться

person saxos    schedule 30.03.2011