Erro de HTTP SSL HttpGet (sem certificado de peer) OU erro (conexão fechada por par)

Eu estou tentando fazer um simples HttpGet para ler uma página da web. Eu tenho isso trabalhando no iOS e trabalhando no Android via http, mas não https.

O url é um IP de rede interna e porta personalizada, então eu posso ler com http assim usando um caminho dehttp://ipaddress:port/MyPage.html

HttpClient httpclient = new DefaultHttpClient(httpParameters);
                    HttpResponse response;
        String responseString = null;
        try {
            // Try connection
            HttpGet get = new HttpGet(params[0].path);
            get.addHeader("Authorization",
                    "Basic "
                            + Base64.encodeBytes(new String(params[0].username + ":" + params[0].password)
                                    .getBytes()));
        response = httpclient.execute(get);
        StatusLine statusLine = response.getStatusLine();
        if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();
            responseString = out.toString();
        } else {
            // Closes the connection.
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
    } catch (ClientProtocolException e) {
        Log.e(TAG, "ClientProtocolException");
        this.e = e;
    } catch (IOException e) {
        Log.e(TAG, "IOException");
        this.e = e;
    }
    return responseString;

Quando tento usar https, recebo oNo peer certificate erro. Então eu tentei usar este código:HttpClient httpclient = new DefaultHttpClient(httpParameters);

private HttpClient createHttpClient() {
        try {
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);

            SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            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", sf, 8080));
            ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);

            return new DefaultHttpClient(conMgr, params);

        } catch (Exception e) {
            return new DefaultHttpClient();
        }
    }

mas isso me dá umConnection closed by peer erro.

O que estou fazendo de errado? Posso ignorar com segurança o certificado, pois é uma rede interna com certificado autoassinado, no entanto, não tenho controle sobre o vert e os usuários do meu aplicativo podem ter certificados diferentes, por isso preciso realmente aceitá-lo ou ignorá-lo.

obrigado

EDITAR ------------------------------

Depois de tentar a resposta do My-Name-Is abaixo: Eu criei uma classe CustomX509TrustManager como sugerido, então crie um HttpClient personalizado usando-a da seguinte forma:

private HttpClient sslClient(HttpClient client) {
        try {
            CustomX509TrustManager tm = new CustomX509TrustManager();
            SSLContext ctx = SSLContext.getInstance("TLS");
            ctx.init(null, new TrustManager[] { tm }, null);
            SSLSocketFactory ssf = new MySSLSocketFactory(ctx);
            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            ClientConnectionManager ccm = client.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme("https", ssf, 8080));
            return new DefaultHttpClient(ccm, client.getParams());
        } catch (Exception ex) {
            return null;
        }
    }

E finalmente use este HttpClient assim:

private class httpGETTask extends AsyncTask<GetParams, Void, String> {
private Exception e = null;

@Override
protected String doInBackground(GetParams... params) {
    // Set connection parameters
    HttpParams httpParameters = new BasicHttpParams();
    int timeoutConnection = 15000;
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
    int timeoutSocket = 15000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

    Log.v(TAG, params[0].path);
    HttpClient httpclient = new DefaultHttpClient(httpParameters);
    httpclient = sslClient(httpclient);

    HttpResponse response;
    String responseString = null;
    try {
        // Try connection
        HttpGet get = new HttpGet(params[0].path);
        get.addHeader("Authorization",
                "Basic "
                        + Base64.encodeBytes(new String(params[0].username + ":" + params[0].password)
                                .getBytes()));

        response = httpclient.execute(get);
        StatusLine statusLine = response.getStatusLine();
        if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();
            responseString = out.toString();
        } else {
            // Closes the connection.
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
    } catch (ClientProtocolException e) {
        Log.e(TAG, "ClientProtocolException");
        this.e = e;
    } catch (IOException e) {
        Log.e(TAG, "IOException");
        this.e = e;
    }
    return responseString;

O caminho registrado está no formatohttps://ipaddress:8080/Page.html Mas eu tenho umConnection closed By Peer erro:

05-24 08: 20: 32.500: E / ConnectionHelper (1129): IOException 05-24 08: 20: 32.550: E / ConnectionHelper (1129): conteúdo de carregamento de exceção 05-24 08: 20: 32.550: E / ConnectionHelper (1129 ): javax.net.ssl.SSLException: Conexão fechada pelo peer 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake (Método nativo) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake (OpenSSLSocketImpl.java:410) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream. (OpenSSLSocketImpl.java:643) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache. harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream (OpenSSLSocketImpl.java:614) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.io.SocketInputBuffer. (SocketInputBuffer. java: 70) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.Soc ketHttpClientConnection.createSessionInputBuffer (SocketHttpClientConnection.java:83) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer (DefaultClientConnection.java:170) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.SocketHttpClientConnection.bind (SocketHttpClientConnection.java:106) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): na organização .apache.http.impl.conn.DefaultClientConnection.openCompleted (DefaultClientConnection.java:129) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection ( DefaultClientConnectionOperator.java:172) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:164) 05-24 08:20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.conn.AbstractPooledConnAdapter.open (AbstractPooledConnAdapter.java:119) 05-24 08: 20: 32.550: E / ConnectionHelper ( 1129): em org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java:360) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.client .AbstractHttpClient.execute (AbstractHttpClient.java:555) 05-24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487) 05- 24 08: 20: 32.550: E / ConnectionHelper (1129): em org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:465) 05-24 08: 20: 32.550: E / ConnectionHelper (1129) : em com.d_apps.my_app.connection_helpers.ConnectionHelper $ httpGETTask.doInBackground (ConnectionHelper.java:114)

questionAnswers(7)

yourAnswerToTheQuestion