elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Conexiones HTTPS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Conexiones HTTPS  (Leído 4,400 veces)
alzehimer_cerebral


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Conexiones HTTPS
« en: 17 Agosto 2010, 20:36 pm »

Hola estoy intentando descargar un archivo mediante una conexio Https y me salta uan excepcion que no logro corregir.

Las clases que implementan la conexion HTTPS son las siguientes:

Código
  1. public class Https {
  2.  
  3.  
  4.  
  5.  
  6.     public static void main(String args[]) throws MalformedURLException, NoSuchAlgorithmException, Exception {
  7.  
  8.        //System.setProperty("javax.net.ssl.trustStore","tomcatKeystore");
  9.  
  10.        //Para aceptar certificados que no estan en el keystore del cliente
  11.        SSLContext sc = SSLContext.getInstance("TLS");
  12.        sc.init(null, new TrustManager[] { new SimpleTrustManager1() }, null);
  13.        SSLSocketFactory ssf = sc.getSocketFactory();
  14.  
  15.        System.out.println("Antes URL");
  16.        URL url = new URL("https://192.168.2.2/PESADO.xml");
  17.        HttpsURLConnection urlConection = (HttpsURLConnection) url.openConnection();
  18.        urlConection.setSSLSocketFactory(ssf);
  19.        //urlConection.setHostnameVerifier(new SimpleHostnameVerifier());
  20.  
  21.        urlConection.connect();
  22.  
  23.  
  24.        System.out.println("Antes INPUTSTREAM");
  25.        InputStream is = urlConection.getInputStream();
  26.        System.out.println("Despues INPUTSTREAM");
  27.        System.out.println("Antes leer fichero");
  28.        File fichero = new File("gasuco.xml");
  29.        FileOutputStream fos = new FileOutputStream(fichero);
  30.        byte[] bytes = new byte[1024];
  31.        int leidos;
  32.        while ((leidos = is.read(bytes)) != -1){
  33.            fos.write(bytes, 0, leidos);
  34.        }
  35.        fos.close();
  36.        is.close();
  37.  
  38.  
  39.     }
  40.  
  41. }
  42.  

Y la del TrustManager:

Código
  1.  
  2. public class SimpleTrustManager1 implements X509TrustManager   {
  3.  
  4.    private Set<X509Certificate> certs = new HashSet<X509Certificate>();
  5.  
  6.  
  7.    public SimpleTrustManager1() throws Exception {
  8.      //Cargamos los certificados del Keystore en el atributo certs
  9.   }
  10.  
  11.   public void checkClientTrusted(X509Certificate[] chain, String authType)
  12.      throws CertificateException {
  13.   }
  14.  
  15.   public X509Certificate[] getAcceptedIssuers() {
  16.     return certs.toArray(new X509Certificate[certs.size()]);
  17.   }
  18.  
  19.   public void checkServerTrusted(X509Certificate[] chain, String authType)
  20.      throws CertificateException {
  21.  
  22.      for(int i=0; i<chain.length; i++){
  23.         if(certs.contains(chain[i])){
  24.            return;
  25.         }
  26.      }
  27.  
  28.      int x =JOptionPane.showConfirmDialog(null, "El servidor "+chain[0].getIssuerDN()+
  29.         " no se puede verificar. " +
  30.         "¿Desde realizar la conexión de todas formas?", "TITULO", JOptionPane.YES_NO_OPTION);
  31.  
  32.      if(x==JOptionPane.OK_OPTION){
  33.  
  34.          //throw new CertificateException("La clave no está en el trustore");
  35.      }
  36. }
  37.  

Me salta la excepcion:

Exception in thread "main" java.io.IOException: HTTPS hostname wrong:  should be <192.168.2.2>
        at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(HttpsClient.java:524)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:448)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
        at conexionHTTPS.Https.main(Https.java:45)

Alguien me puede guiar en como corregir dicho error???

Saludos.

alzehimer_cerebral


En línea

Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Conexiones HTTPS
« Respuesta #1 en: 17 Agosto 2010, 20:52 pm »

Como que debes quitarle el https:// se supone que ya es seguro que es https no?

:)

Saludos


En línea

alzehimer_cerebral


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Re: Conexiones HTTPS
« Respuesta #2 en: 17 Agosto 2010, 22:10 pm »

Eso no es porque a la hora de crear una URL hay que indicar el protocolo.  :P Ademas el connect es el que lanza la excepcion, tambien la lanza el getInputStream si comento la linea del connect!  Yo diria que una mala gestion de la clase SimpleTrustManager1 lanza la excepcion ya que el constructor realmente no esta haciendo nada, alguien sabe como podria cargar el keystore que tiene cada cliente en su maquina en la variable certs???

Aclaracion: la aplicacion se conecta a un servidor cuyo certificado X.509 es autofirmado (no esta dado de alta en las empresas que los validan).  Por lo tanto cuando la aplicacion haga una conexion al servidor deberia saltar un mensaje para confirmar si se confia en la autoridad del certificado, al dar en que si se confia no se exactamente que es lo que se debe hacer, se podria iniciar la descarga sin mas o se deberia añadir el certificado al keystore del cliente para que en un futuro no salte el mensaje de confianza???

Haber si alguien me ayuda a aclarar la parte teorica para poder proseguir con la implementacion, ya que no me queda claro el proceso a seguir..

Cualquier opinion o experiencia es bienvenida.

Salu2.

alzehimer_cerebral
« Última modificación: 17 Agosto 2010, 22:28 pm por alzehimer_cerebral » En línea

Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com
Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Conexiones HTTPS
« Respuesta #3 en: 18 Agosto 2010, 00:34 am »

Usaste el HostnameVerifier y lo usaste por defecto en HttpsURLConnection.setDefaultHostnameVerifier()?

funciona en otras https seguramente tengas que configurar el tomcat

http://forums.sun.com/thread.jspa?threadID=620276&messageID=3514309
« Última modificación: 18 Agosto 2010, 00:46 am por LEYER » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Configurar conexiones Http y Https
Java
alzehimer_cerebral 0 2,868 Último mensaje 24 Junio 2011, 01:38 am
por alzehimer_cerebral
El buscador de Google abraza las conexiones HTTPS en todo el mundo
Noticias
wolfbcn 4 2,890 Último mensaje 10 Marzo 2012, 01:29 am
por raul338
Las conexiones HTTPS podrían no ser tan seguras como creíamos en un principio
Noticias
wolfbcn 0 1,375 Último mensaje 20 Marzo 2016, 02:47 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines