2011-07-22 20 views
9

Estoy haciendo comunicación de socket a través de la siguiente dirección IP que funciona, pero no quiero hacer la comunicación en modo ssl, pero ¿cómo puedo cambiar InetAddress serverAddr = InetAddress.getByName("192.168.1.2"); a SSL.cómo hacer la programación de socket ssl

public class TCPClient implements Runnable { 

    public void run() { 

    try { 

     InetAddress serverAddr = InetAddress.getByName("192.168.1.2"); 

      Log.d("TCP", "C: Connecting..."); 

      Socket socket = new Socket(serverAddr,12345); 

      String message = "Hello from Client android emulator"; 
       try { 

        Log.d("TCP", "C: Sending: '" + message + "'"); 

        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 

        out.println(message); 

        Log.d("TCP", "C: Sent."); 

       Log.d("TCP", "C: Done."); 



     } catch(Exception e) { 

      Log.e("TCP", "S: Error", e); 
       } finally { 

        socket.close(); 

        } 
    } catch (Exception e) { 

      Log.e("TCP", "C: Error", e); 

    } 

} 

} 
+0

https es para tráfico seguro HTTPS. Parece que está escribiendo un servidor de socket sin procesar. Solo llámalo SSL. –

+0

Usted * no puede * 'cambiar 'InetAddress serverAddr = InetAddress.getByName (" 192.168.1.2 ")' a SSL. Es una búsqueda de dirección IP. La pregunta no tiene sentido. Lo que estás buscando es 'javax.net.ssl.SSLSocket' y tus amigos. – EJP

Respuesta

19

Crea SSLSocket en lugar de Socket. El resto es lo mismo

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("192.168.1.2", 12345); 

Es posible que desee agregar propiedades adicionales de SSL. Tienes que hacerlo más rápido:

Para autenticar el servidor, el almacén de confianza del cliente debe contener el certificado del servidor. El SSL de cliente con autenticación de servidor está habilitado por el atributo URL ssl o la propiedad ssl establecida en peerAuthentication. Además, las propiedades del sistema javax.net.ssl.trustStore y javax.net.ssl.trustStorePassword es necesario establecer .:

System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key"); 
System.setProperty("javax.net.ssl.trustStorePassword","qwerty"); 

Si el servidor realiza la autenticación del cliente, el cliente necesitará un par de claves y una certificado del cliente:

System.setProperty("javax.net.ssl.keyStore","clientKeyStore.key"); 
System.setProperty("javax.net.ssl.keyStorePassword","qwerty"); 
+1

No hay 'si el cliente quiere autenticar el servidor' al respecto. Eso es obligatorio en SSL. – EJP

1

Básicamente necesita usar SSLSocket que es para comunicación SSL en Java.

Al crear el SSLSocket, primero necesita configurar el almacén de confianza que debe verificar el certificado del servidor.

Luego necesita obtener el SSLSocket y conectarse al servidor y luego comenzar a hacer un saludo con el servidor.

Una vez que se haya completado con éxito el intercambio de información, puede comenzar a intercambiar datos de la aplicación con el servidor normalmente como otra conexión de socket simple.

A HTTPS client and HTTPS server demo in Java ofrece una demostración sobre cómo crear un servidor SSL y un cliente SSL en Java. Es bastante útil.

Cuestiones relacionadas