Autore Topic: Connessione HTTPS secondo Google, come crearla?  (Letto 169 volte)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 277
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    S2
  • Sistema operativo:
    Xubuntu
Connessione HTTPS secondo Google, come crearla?
« il: 26 Marzo 2018, 22:20:42 CEST »
0
Ciao a tutti,
la mia app recentemente è stata sottoposta ad analisi da parte di Google ed è stata rimossa con la seguente motivazione:
Codice: [Seleziona]
Apps handling personal or sensitive user data (including personally identifiable information, financial and payment information, authentication information, phonebook or contact data, microphone and camera sensor data, and sensitive device data) must handle the user data securely, including transmitting it using modern cryptography (for example, over HTTPS

Il fatto è che io ad ogni connessione mi riferisco al mio framework tramite connessione https, come dall'esempio:
Codice (Java): [Seleziona]
public boolean connectAndSendToServer( JSONArray args )
{
    String rispostaServer       =   "";
    try
    {
        HttpClient httpclient   =   new DefaultHttpClient();
        httpclient.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
        httpclient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
        HttpPost httppost       =   new HttpPost( "https://....org/Framework/index.php" );

        List<NameValuePair> nameValuePairs      =   new ArrayList<NameValuePair>( 1 );

        for ( int x = 0; x < args.length(); x++ )
        {
            JSONObject jsonTemp     =   (JSONObject) args.get( x );
            nameValuePairs.add( new BasicNameValuePair( jsonTemp.get( "chiave" ).toString() , ( ( jsonTemp.get( "valore" ) == null ) ? "null" : jsonTemp.get( "valore" ).toString() ) ) );
        }

        httppost.setEntity( new UrlEncodedFormEntity( nameValuePairs, "UTF-8" ) );

        // Esegue la Richiesta HTTP Post
        HttpResponse response   =   httpclient.execute(httppost);
        HttpEntity entity       =   response.getEntity();

        // Crea un oggetto JSON dalla risposta fornita dalla richiesta
        rispostaServer  =   EntityUtils.toString( entity );

        try
        {
            jsonObjectServerResponse    =   new JSONArray( rispostaServer );
        }
        catch ( Exception e )
        {
            jsonObjectServerResponse    =   new JSONArray().put( new JSONObject( rispostaServer ) );
        }

        return true;
    }
    catch( Exception eE )
    {
        eE.printStackTrace();
    }

    return false;
}

Quindi mi viene spontanea la domanda: come dovrei eseguire una connessione HTTPs?
Il framework si trova su server Altervista, per la cronaca ed accetta connessioni HTTPs

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 835
  • Respect: +182
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Connessione HTTPS secondo Google, come crearla?
« Risposta #1 il: 27 Marzo 2018, 10:13:45 CEST »
+1
Forse qui trovi qualche informazione utile: https://stackoverflow.com/questions/2603691/android-httpclient-and-https

Io però ti consiglierei di usare HttpsURLConnection, anche perché la libreria di Apache è stata dichiarata obsoleta
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 277
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    S2
  • Sistema operativo:
    Xubuntu
Re:Connessione HTTPS secondo Google, come crearla?
« Risposta #2 il: 27 Marzo 2018, 14:18:24 CEST »
0
Intanto grazie per la risposta!

Codice (Java): [Seleziona]
 public HttpClient getNewHttpClient()
{
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));

        HttpParams params = new BasicHttpParams();

        SingleClientConnManager mgr = new SingleClientConnManager(params, schemeRegistry);

        return new DefaultHttpClient(mgr, params);
    }
Ispirandomi al link che mi hai suggerito ho costruito questa funzione (a dire il vero credo di averlo anche già letto quel thread, prima di scrivere ho frugato a lungo).
Restituisce un httpClient funzionante che inserito nella funzione al primo post fa le richieste POST come aspettato.
La domanda ora è: come mi assicuro sia davvero una connessione HTTPS?
Quella che invece facevo prima non lo era?

Tra l'altro nell'emulatore con questa funzione la connessione al server non funziona più e ricevo il fatidico
Codice: [Seleziona]
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate in emulator

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 835
  • Respect: +182
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Connessione HTTPS secondo Google, come crearla?
« Risposta #3 il: 27 Marzo 2018, 14:31:08 CEST »
0
Valuta se questo post può essere di aiuto: https://www.anddev.it/index.php?topic=6878.0

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.