Connessione HTTPS Android


101

Sto facendo un post https e ricevo un'eccezione di eccezione SSL Certificato server non attendibile. Se faccio un http normale, funziona perfettamente. Devo accettare in qualche modo il certificato del server?


Posso ottenere un'implementazione di esempio dello stesso
Sam97305421562

può questo thread aiutare, ma non posso dire se funziona sarà l'ultima API: groups.google.com/group/android-developers/browse_thread/thread/…
RzR

Risposte:


45

Sto ipotizzando, ma se vuoi che si verifichi una stretta di mano, devi far sapere ad Android del tuo certificato. Se vuoi semplicemente accettare qualunque cosa accada, usa questo pseudo-codice per ottenere ciò di cui hai bisogno con il client HTTP Apache:

SchemeRegistry schemeRegistry = new SchemeRegistry ();

schemeRegistry.register (new Scheme ("http",
    PlainSocketFactory.getSocketFactory (), 80));
schemeRegistry.register (new Scheme ("https",
    new CustomSSLSocketFactory (), 443));

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager (
    params, schemeRegistry);


return new DefaultHttpClient (cm, params);

CustomSSLSocketFactory:

public class CustomSSLSocketFactory extends org.apache.http.conn.ssl.SSLSocketFactory
{
private SSLSocketFactory FACTORY = HttpsURLConnection.getDefaultSSLSocketFactory ();

public CustomSSLSocketFactory ()
    {
    super(null);
    try
        {
        SSLContext context = SSLContext.getInstance ("TLS");
        TrustManager[] tm = new TrustManager[] { new FullX509TrustManager () };
        context.init (null, tm, new SecureRandom ());

        FACTORY = context.getSocketFactory ();
        }
    catch (Exception e)
        {
        e.printStackTrace();
        }
    }

public Socket createSocket() throws IOException
{
    return FACTORY.createSocket();
}

 // TODO: add other methods like createSocket() and getDefaultCipherSuites().
 // Hint: they all just make a call to member FACTORY 
}

FullX509TrustManager è una classe che implementa javax.net.ssl.X509TrustManager, ma nessuno dei metodi esegue effettivamente alcun lavoro, ottieni un esempio qui .

In bocca al lupo!


Perché c'è la variabile FACTORY ??
Codevalley,

1
return FACTORY.createSocket (); sta avendo problemi. Il socket creato fornisce un'eccezione Pointer nulla su execute (). Inoltre, ho notato, ci sono 2 classi SocketFactory. 1. org.apache.http.conn.ssl.SSLSocketFactory e 2. javax.net.ssl.SSLSocketFactory
Codevalley

2
Ciao Nate, sembra qualcosa di utile per la mia situazione. Tuttavia, sto riscontrando alcuni problemi con la creazione di CustomSSLSocketFactory. Quale classe dovrebbe estendere? O quale interfaccia dovrebbe implementare? Ho sperimentato: javax.net.SocketFactory, javax.net.ssl.SSLSocketFactory, org.apache.http.conn.scheme.SocketFactory, che impongono l'implementazione di altri metodi ... Quindi, in generale, cosa sono gli spazi dei nomi delle classi utilizzate nel codice? Grazie. :)
Cephron

2
Non funziona per me, mi dà lo stesso errore di certificato del server non attendibile.
Omar Rehman

1
come posso ottenere questa lezioneFullX509TrustManager
RajaReddy PolamReddy

89

Questo è quello che sto facendo. Semplicemente non controlla più il certificato.

// always verify the host - dont check for certificate
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

/**
 * Trust every server - dont check for any certificate
 */
private static void trustAllHosts() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[] {};
        }

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

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

    // Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection
                .setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

e

    HttpURLConnection http = null;

    if (url.getProtocol().toLowerCase().equals("https")) {
        trustAllHosts();
        HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
        https.setHostnameVerifier(DO_NOT_VERIFY);
        http = https;
    } else {
        http = (HttpURLConnection) url.openConnection();
    }

Questo sembra buono! Tuttavia, sto utilizzando WebView e devo solo connettermi a un server https a scopo di test. (Il client non può fornirne uno con un FQDN corrispondente, né può eseguire il test su http.) C'è un modo per affrontare questo problema quando si utilizza WebView? Rilascio semplicemente questo codice nell'attività in cui si trova il WebView e "funziona e basta?" (Sospettando di no ... ??)
Joe D'Andrea

sto cercando di utilizzare quella soluzione passo dopo passo e sto ottenendo tale eccezione: 07-25 12: 35: 25.941: WARN / System.err (24383): java.lang.ClassCastException: org.apache.harmony.luni .internal.net.www.protocol.http.HttpURLConnectionImpl nel posto in cui sto cercando di aprire la connessione ... qualche idea del perché ??
Robert

1
Ehi, ho fatto come suggerito da te ma ricevo l'eccezione come javax.net.ssl.SSLException: Received fatal alert: bad_record_mac. Ho anche provato a sostituire TLScon SSLma non ha aiutato. Per favore aiutami, grazie
devsri

40
Sebbene ciò sia positivo durante la fase di sviluppo, dovresti essere consapevole del fatto che ciò consente a chiunque di MITM la tua connessione sicura fingendo un certificato SSL casuale, il che rende la tua connessione non più sicura. Dai un'occhiata a questa domanda per vedere che è stata fatta nel modo giusto, qui per vedere come ricevere un certificato, e infine questo per imparare come aggiungerlo al keystore.
cimnine

2
Non dovresti usare consiglia o inserisci questo codice. È radicalmente insicuro. Dovresti risolvere il problema reale.
Marchese di Lorne



4

http://madurangasblogs.blogspot.in/2013/08/avoiding-javaxnetsslsslpeerunverifiedex.html

Cortesia Maduranga

Quando si sviluppa un'applicazione che utilizza https, il server di prova non dispone di un certificato SSL valido. O a volte il sito web utilizza un certificato autofirmato o il sito web utilizza un certificato SSL gratuito. Quindi se provi a connetterti al server usando Apache HttpClient, otterrai un'eccezione che dice che il "peer non è autenticato". Sebbene non sia una buona pratica fidarsi di tutti i certificati in un software di produzione, potrebbe essere necessario farlo a seconda della situazione. Questa soluzione risolve l'eccezione causata da "peer non autenticato".

Ma prima di arrivare alla soluzione, devo avvertirti che questa non è una buona idea per un'applicazione di produzione. Ciò violerà lo scopo di utilizzare un certificato di sicurezza. Quindi, a meno che tu non abbia una buona ragione o se sei sicuro che ciò non causerà alcun problema, non utilizzare questa soluzione.

Normalmente crei un file HttpClientcome questo.

HttpClient httpclient = new DefaultHttpClient();

Ma devi cambiare il modo in cui crei HttpClient.

Per prima cosa devi creare una classe extending org.apache.http.conn.ssl.SSLSocketFactory.

import org.apache.http.conn.ssl.SSLSocketFactory;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class MySSLSocketFactory extends SSLSocketFactory {
         SSLContext sslContext = SSLContext.getInstance("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();
    }
}

Quindi crea un metodo come questo.

public HttpClient getNewHttpClient() {
     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.UTF_8);

         SchemeRegistry registry = new SchemeRegistry();
         registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
         registry.register(new Scheme("https", sf, 443));

         ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

         return new DefaultHttpClient(ccm, params);
     } catch (Exception e) {
         return new DefaultHttpClient();
     }
}

Quindi puoi creare il file HttpClient.

HttpClient httpclient = getNewHttpClient();

Se stai cercando di inviare una richiesta di post a una pagina di accesso, il resto del codice sarà così.

private URI url = new URI("url of the action of the form");
HttpPost httppost =  new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
nameValuePairs.add(new BasicNameValuePair("username", "user"));  
nameValuePairs.add(new BasicNameValuePair("password", "password"));
try {
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    InputStream is = entity.getContent();
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Ottieni la pagina html in InputStream. Quindi puoi fare quello che vuoi con la pagina html restituita.

Ma qui dovrai affrontare un problema. Se vuoi gestire una sessione utilizzando i cookie, non sarai in grado di farlo con questo metodo. Se vuoi ottenere i cookie, dovrai farlo tramite un browser. Allora solo tu riceverai i cookie.




2

Nessuna di queste risposte non ha funzionato per me, quindi ecco un codice che si fida di qualsiasi certificato.

import java.io.IOException;

    import java.net.Socket;
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    import java.security.UnrecoverableKeyException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;

    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;

    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.scheme.PlainSocketFactory;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.conn.ssl.X509HostnameVerifier;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
    import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

    public class HttpsClientBuilder {
        public static DefaultHttpClient getBelieverHttpsClient() {

            DefaultHttpClient client = null;

            SchemeRegistry Current_Scheme = new SchemeRegistry();
            Current_Scheme.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            try {
                Current_Scheme.register(new Scheme("https", new Naive_SSLSocketFactory(), 8443));
            } catch (KeyManagementException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnrecoverableKeyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (KeyStoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            HttpParams Current_Params = new BasicHttpParams();
            int timeoutConnection = 8000;
            HttpConnectionParams.setConnectionTimeout(Current_Params, timeoutConnection);
            int timeoutSocket = 10000;
            HttpConnectionParams.setSoTimeout(Current_Params, timeoutSocket);
            ThreadSafeClientConnManager Current_Manager = new ThreadSafeClientConnManager(Current_Params, Current_Scheme);
            client = new DefaultHttpClient(Current_Manager, Current_Params);
            //HttpPost httpPost = new HttpPost(url);
            //client.execute(httpPost);

         return client;
         }

    public static class Naive_SSLSocketFactory extends SSLSocketFactory
    {
        protected SSLContext Cur_SSL_Context = SSLContext.getInstance("TLS");

        public Naive_SSLSocketFactory ()
                throws NoSuchAlgorithmException, KeyManagementException,
                KeyStoreException, UnrecoverableKeyException
        {
            super(null, null, null, null, null, (X509HostnameVerifier)null);
            Cur_SSL_Context.init(null, new TrustManager[] { new X509_Trust_Manager() }, null);
        }

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

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

    private static class X509_Trust_Manager implements X509TrustManager
    {

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            // TODO Auto-generated method stub

        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            // TODO Auto-generated method stub

        }

        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }

    };
}

Questo codice funziona bene con il pattern URL - localhost: 8443 / webProject / YourService
Speise

Il costruttore SSLSocketFactory (null, null, null, null, null, X509HostnameVerifier) ​​non è definito
Michal

1

Non conosco le specifiche di Android per i certificati SSL, ma avrebbe senso che Android non accetti immediatamente un certificato SSL autofirmato. Ho trovato questo post dai forum Android che sembra affrontare lo stesso problema: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html


Come ho detto, non conosco le specifiche di Android ma è il giorno in cui devi dire alla piattaforma qual è il certificato ssl del server a cui ti stai connettendo. Cioè se stai usando un certificato autofirmato che non è riconosciuto dalla piattaforma. La classe SslCertificate sarà probabilmente utile: developer.android.com/reference/android/net/http/… Approfondirò questo argomento più tardi oggi, quando avrò più tempo.
Matti Lyra

1

Questo è un problema noto con Android 2.x. Stavo lottando con questo problema per una settimana fino a quando non mi sono imbattuto nella seguente domanda, che non solo fornisce un buon background del problema, ma fornisce anche una soluzione funzionante ed efficace priva di buchi di sicurezza.

Errore "Nessun certificato peer" in Android 2.3 ma NON in 4


0

Per qualche motivo la soluzione menzionata per httpClient sopra non ha funzionato per me. Alla fine sono riuscito a farlo funzionare sovrascrivendo correttamente il metodo durante l'implementazione della classe SSLSocketFactory personalizzata.

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

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

Ecco come ha funzionato perfettamente per me. Puoi vedere la classe personalizzata completa e l'implementazione nel seguente thread: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/


0

Ho fatto questo corso e l'ho trovato

package com.example.fakessl;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;

import android.util.Log;

public class CertificadoAceptar {
    private static TrustManager[] trustManagers;

    public static class _FakeX509TrustManager implements
            javax.net.ssl.X509TrustManager {
        private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};

        public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }

        public boolean isClientTrusted(X509Certificate[] chain) {
            return (true);
        }

        public boolean isServerTrusted(X509Certificate[] chain) {
            return (true);
        }

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

    public static void allowAllSSL() {

        javax.net.ssl.HttpsURLConnection
                .setDefaultHostnameVerifier(new HostnameVerifier() {
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                });

        javax.net.ssl.SSLContext context = null;

        if (trustManagers == null) {
            trustManagers = new javax.net.ssl.TrustManager[] { new _FakeX509TrustManager() };
        }

        try {
            context = javax.net.ssl.SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            Log.e("allowAllSSL", e.toString());
        } catch (KeyManagementException e) {
            Log.e("allowAllSSL", e.toString());
        }
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(context
                .getSocketFactory());
    }
}

in te codice bianco questo

CertificadoAceptar ca = new CertificadoAceptar();
ca.allowAllSSL();
HttpsTransportSE Transport = new HttpsTransportSE("iphost or host name", 8080, "/WS/wsexample.asmx?WSDL", 30000);

0

Fonti che mi hanno aiutato a lavorare con il mio certificato autofirmato sul mio server AWS Apache e connettermi con HttpsURLConnessione dal dispositivo Android:

SSL su istanza aws - tutorial di amazon su ssl
Android Security con HTTPS e SSL - creazione del tuo gestore di fiducia sul client per l'accettazione il tuo certificato
Creazione di un certificato autofirmato - script facile per creare i tuoi certificati

Poi ho fatto quanto segue:

  1. Assicurati che il server supporti https (sudo yum install -y mod24_ssl)
  2. Metti questo script in un file create_my_certs.sh:
#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p server/ client/ all/

# Create your very own Root Certificate Authority
openssl genrsa \
  -out all/my-private-root-ca.privkey.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key all/my-private-root-ca.privkey.pem \
  -days 1024 \
  -out all/my-private-root-ca.cert.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out all/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key all/privkey.pem \
  -out all/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
openssl x509 \
  -req -in all/csr.pem \
  -CA all/my-private-root-ca.cert.pem \
  -CAkey all/my-private-root-ca.privkey.pem \
  -CAcreateserial \
  -out all/cert.pem \
  -days 500

# Put things in their proper place
rsync -a all/{privkey,cert}.pem server/
cat all/cert.pem > server/fullchain.pem         # we have no intermediates in this case
rsync -a all/my-private-root-ca.cert.pem server/
rsync -a all/my-private-root-ca.cert.pem client/
  1. Correre bash create_my_certs.sh yourdomain.com
  2. Posiziona i certificati nella loro posizione corretta sul server (puoi trovare la configurazione in /etc/httpd/conf.d/ssl.conf). Tutti questi dovrebbero essere impostati:
    SSLCertificateFile
    SSLCertificateKeyFile
    SSLCertificateChainFile
    SSLCACertificateFile

  3. Riavvia httpd utilizzando sudo service httpd restarte assicurati che httpd sia avviato:
    Arresto httpd: [OK]
    Avvio httpd: [OK]

  4. Copia my-private-root-ca.certnella cartella delle risorse del progetto Android

  5. Crea il tuo gestore della fiducia:

    SSLContext SSLContext;

    CertificateFactory cf = CertificateFactory.getInstance ("X.509"); InputStream caInput = context.getAssets (). Open ("my-private-root-ca.cert.pem"); Certificato ca; prova {ca = cf.generateCertificate (caInput); } infine {caInput.close (); }

      // Create a KeyStore containing our trusted CAs
      String keyStoreType = KeyStore.getDefaultType();
      KeyStore keyStore = KeyStore.getInstance(keyStoreType);
      keyStore.load(null, null);
      keyStore.setCertificateEntry("ca", ca);
    
      // Create a TrustManager that trusts the CAs in our KeyStore
      String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
      TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
      tmf.init(keyStore);
    
      // Create an SSLContext that uses our TrustManager
      SSLContext = SSLContext.getInstance("TLS");
      SSSLContext.init(null, tmf.getTrustManagers(), null);
  6. Ed effettua la connessione usando HttpsURLConnection:

    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection (); connection.setSSLSocketFactory (SSLContext.getSocketFactory ());

  7. Ecco fatto, prova la tua connessione https.


0

Probabilmente puoi provare qualcosa di simile. Questo mi ha aiutato

    SslContextFactory sec = new SslContextFactory();
    sec.setValidateCerts(false);
    sec.setTrustAll(true);

    org.eclipse.jetty.websocket.client.WebSocketClient client = new WebSocketClient(sec);

-1

Usa questo metodo come client HTTP:

public static  HttpClient getNewHttpClient() {
    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.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.