Autore Topic: Connessione HTTPS con server  (Letto 735 volte)

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Connessione HTTPS con server
« il: 17 Ottobre 2013, 17:54:54 CEST »
0
Salve a tutti, ho la necessità di realizzare una connessione sicura con un server su cui girano degli script e delle servlet jsp.
Per ora grazie ad uglyicons sono arrivato a realizzare una connessione con pagine in ssl selfsigned ma non riesco a farlo con il mio server mi sapete dare una mano??
Lo stato dell'arte è questo
Codice (Java): [Seleziona]
package com.example.esempio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

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

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

        private TextView textView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                textView = (TextView) findViewById(R.id.text1);

                new Connection().execute();
        }

        private class Connection extends AsyncTask<String, Void, String> {

                @Override
                protected String doInBackground(String... urls) {

                        return connect();

                }

                @Override
                protected void onPostExecute(String result) {
                        textView.setText(result);
                }

        }

        private String connect() {

                SSLContext context = null;
                try {
                        context = SSLContext.getInstance("TLS");
                } catch (NoSuchAlgorithmException e4) {
                        // TODO Auto-generated catch block
                        e4.printStackTrace();
                }
                X509TrustManager tm = new X509TrustManager() {

                        public void checkClientTrusted(X509Certificate[] xcs, String string)
                                        throws CertificateException {
                        }

                        public void checkServerTrusted(X509Certificate[] xcs, String string)
                                        throws CertificateException {
                        }

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

                try {
                        context.init(null, new TrustManager[] { tm }, null);
                } catch (KeyManagementException e3) {
                        // TODO Auto-generated catch block
                        e3.printStackTrace();
                }

                // Tell the URLConnection to use a SocketFactory from our SSLContext
                URL url = null;
                try {
                        url = new URL("https://192.168.1.60:8443/Fisio/login.jsp");
                      //  url = new URL("https://certs.cac.washington.edu/CAtest/");
                } catch (MalformedURLException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                }
                HttpsURLConnection urlConnection = null;
                try {
                        urlConnection = (HttpsURLConnection) url.openConnection();
                } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                urlConnection.setSSLSocketFactory(context.getSocketFactory());
                InputStream in = null;
                try {
                        in = urlConnection.getInputStream();
                } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }

                StringBuilder risposta = new StringBuilder();

                try {

                        if (in != null) {
                                BufferedReader buffer = new BufferedReader(
                                                new InputStreamReader(in));
                                String s = "";
                                while ((s = buffer.readLine()) != null) {
                                        risposta.append(s);
                                 }

                        } else {
                                risposta.append("");
                        }

                        copyInputStreamToOutputStream(in, System.out);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                return risposta.toString();

        }

        private void copyInputStreamToOutputStream(InputStream in, PrintStream out)
                        throws IOException {
                byte[] buffer = new byte[256];
                int bytesRead = 0;
                while ((bytesRead = in.read(buffer)) != -1) {
                        out.write(buffer, 0, bytesRead);
                }

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

il log che da qualora inserissi il mio url è
Codice: [Seleziona]
10-17 11:56:02.291: W/System.err(12003): java.io.IOException: Hostname 'xxxxxxxxxxxxxxxxxxxxx' was not verified
10-17 11:56:02.291: W/System.err(12003):         at libcore.net.http.HttpConnection.verifySecureSocketHostname(HttpConnection.java:223)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:446)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
10-17 11:56:02.296: W/System.err(12003):         at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
10-17 11:56:02.296: W/System.err(12003):         at com.example.esempio.MainActivity.connect(MainActivity.java:106)
10-17 11:56:02.296: W/System.err(12003):         at com.example.esempio.MainActivity.access$0(MainActivity.java:56)
10-17 11:56:02.296: W/System.err(12003):         at com.example.esempio.MainActivity$Connection.doInBackground(MainActivity.java:45)
10-17 11:56:02.301: W/System.err(12003):         at com.example.esempio.MainActivity$Connection.doInBackground(MainActivity.java:1)
10-17 11:56:02.301: W/System.err(12003):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-17 11:56:02.301: W/System.err(12003):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
10-17 11:56:02.301: W/System.err(12003):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
10-17 11:56:02.301: W/System.err(12003):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-17 11:56:02.301: W/System.err(12003):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-17 11:56:02.301: W/System.err(12003):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-17 11:56:02.301: W/System.err(12003):         at java.lang.Thread.run(Thread.java:856)
10-17 11:56:02.306: W/dalvikvm(12003): threadid=11: thread exiting with uncaught exception (group=0x411fc2a0)
10-17 11:56:02.311: E/AndroidRuntime(12003): FATAL EXCEPTION: AsyncTask #1
10-17 11:56:02.311: E/AndroidRuntime(12003): java.lang.RuntimeException: An error occured while executing doInBackground()
10-17 11:56:02.311: E/AndroidRuntime(12003):         at android.os.AsyncTask$3.done(AsyncTask.java:299)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.lang.Thread.run(Thread.java:856)
10-17 11:56:02.311: E/AndroidRuntime(12003): Caused by: java.lang.NullPointerException
10-17 11:56:02.311: E/AndroidRuntime(12003):         at com.example.esempio.MainActivity.copyInputStreamToOutputStream(MainActivity.java:142)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at com.example.esempio.MainActivity.connect(MainActivity.java:128)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at com.example.esempio.MainActivity.access$0(MainActivity.java:56)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at com.example.esempio.MainActivity$Connection.doInBackground(MainActivity.java:45)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at com.example.esempio.MainActivity$Connection.doInBackground(MainActivity.java:1)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-17 11:56:02.311: E/AndroidRuntime(12003):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
10-17 11:56:02.311: E/AndroidRuntime(12003):         ... 5 more


grazie a tutti

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Connessione HTTPS con server
« Risposta #1 il: 17 Ottobre 2013, 19:15:33 CEST »
0
A occhio, nel LogCat ti sta dicendo che alla riga 128 hai in che è null.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Connessione HTTPS con server
« Risposta #2 il: 18 Ottobre 2013, 14:41:32 CEST »
0
Si infatti ma è perchè non riesce a leggere le info dal mio server, invece con lo stesso codice e un server di prova(cioè quello commentato) funziona...

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Connessione HTTPS con server
« Risposta #3 il: 21 Ottobre 2013, 14:11:05 CEST »
0
nessuno riesce a darmi una mano??

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Connessione HTTPS con server
« Risposta #4 il: 21 Ottobre 2013, 14:18:27 CEST »
0
Ma se il tuo server (https://192.168.1.60:8443/Fisio/login.jsp) lo apri da un qualsiasi browser, funziona tutto o ti da' problemi di autenticazione?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Connessione HTTPS con server
« Risposta #5 il: 21 Ottobre 2013, 14:21:43 CEST »
0
no funziona tutto

Post unito: 21 Ottobre 2013, 14:22:13 CEST
funziona sia dal browser del tablet che da pc