Безопасное соединение с httpclient в Android - PullRequest
2 голосов
/ 20 января 2012

У меня проблема с моим defaultHttpClient.

Я должен установить соединение с сервером, использующим HTTPS-соединение.Я обнаружил, что HttpClient по умолчанию использует протокол безопасности TLS, а сервер, к которому я хочу подключиться, не поддерживает его.

Я не могу изменить это, и я вынужден изменить свой протокол безопасностив моем приложении!

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 января 2012

Это не похоже на работу, но я решил это, добавив метод:

setEnableProtocols(new String[]{"SSLv3"});

При создании моего личного SSLSocket

Теперь все, кажется, работает!

0 голосов
/ 20 января 2012

Попробуйте этот клиент, это помогло мне много раз.

public class MyHttpClient1 extends DefaultHttpClient {

    final Context context;


    MyHttpClient1 mHttpClient=null;

    public MyHttpClient1(Context context) {
          this.context = context;
    }

    @Override
    protected ClientConnectionManager createClientConnectionManager() {
      SchemeRegistry registry = new SchemeRegistry();
        KeyStore trustStore = null;
        try {
            trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        } catch (KeyStoreException e) {
            e.printStackTrace();  
        }
        try {
            trustStore.load(null, null);
        } catch (IOException e) {
            e.printStackTrace();  
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();  
        } catch (CertificateException e) {
            e.printStackTrace();  
        }
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
      // Register for port 443 our SSLSocketFactory with our keystore
      // to the ConnectionManager
        try {
            registry.register(new Scheme("https",new MySSLSocketFactory(trustStore), 443));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();  
        } catch (KeyManagementException e) {
            e.printStackTrace();  
        } catch (KeyStoreException e) {
            e.printStackTrace();  
        } catch (UnrecoverableKeyException e) {
            e.printStackTrace();  
        }
        return new SingleClientConnManager(getParams(), registry);
    }

    public class MySSLSocketFactory extends SSLSocketFactory {
    SSLContext sslContext = SSLContext.getInstance("SSL");   //or TLS

    public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }

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