Contenidos
Pasos necesarios para poner en funcionamiento sockets SSL en Java:
Crear certificado con Keytool
1 |
keytool -genkey -alias servidor -keyalg RSA -keystore AlmacenSrv -storepass 1234567 |
Crear servidor seguro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import java.io.*; import javax.net.ssl.*; public class Servidor { public static void main(String[] arg) throws IOException { int puerto = 5556; SSLServerSocketFactory sfact = (SSLServerSocketFactory) SSLServerSocketFactory .getDefault(); SSLServerSocket servidorSSL = (SSLServerSocket) sfact .createServerSocket(puerto); SSLSocket clienteConectado = null; DataInputStream flujoEntrada = null;//FLUJO DE ENTRADA DE CLIENTE DataOutputStream flujoSalida = null;//FLUJO DE SALIDA AL CLIENTE for (int i = 1; i < 3; i++) { System.out.println("Esperando al cliente " + i); clienteConectado = (SSLSocket) servidorSSL.accept(); flujoEntrada = new DataInputStream(clienteConectado.getInputStream()); // EL CLIENTE ME ENVIA UN MENSAJE System.out.println("Recibiendo del CLIENTE: " + i + " \n\t" + flujoEntrada.readUTF()); flujoSalida = new DataOutputStream(clienteConectado.getOutputStream()); // ENVIO UN SALUDO AL CLIENTE flujoSalida.writeUTF("Saludos al cliente del servidor"); } // CERRAR STREAMS Y SOCKETS flujoEntrada.close(); flujoSalida.close(); clienteConectado.close(); servidorSSL.close(); } } |
Ejecutar servidor seguro desde la consola utilizando el certificado creado con Keytool
1 |
java -Djavax.net.ssl.keyStore=AlmacenSrv -Djavax.net.ssl.keyStorePassword=1234567 Servidor |
Crear cliente seguro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.*; import javax.net.ssl.*; public class Cliente { public static void main(String[] args) throws Exception { String Host = "localhost"; int puerto = 5556;//puerto remoto System.out.println("PROGRAMA CLIENTE INICIADO...."); SSLSocketFactory sfact = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket Cliente = (SSLSocket) sfact.createSocket(Host, puerto); // CREO FLUJO DE SALIDA AL SERVIDOR DataOutputStream flujoSalida = new DataOutputStream(Cliente.getOutputStream()); // ENVIO UN SALUDO AL SERVIDOR flujoSalida.writeUTF("Saludos al SERVIDOR DESDE EL CLIENTE"); // CREO FLUJO DE ENTRADA AL SERVIDOR DataInputStream flujoEntrada = new DataInputStream(Cliente.getInputStream()); // EL servidor ME ENVIA UN MENSAJE System.out.println("Recibiendo del SERVIDOR: \n\t" + flujoEntrada.readUTF()); // CERRAR STREAMS Y SOCKETS flujoEntrada.close(); flujoSalida.close(); Cliente.close(); } } |
Ejecutar cliente seguro desde la consola utilizando el certificado creado con Keytool
1 |
java -Djavax.net.ssl.trustStore=AlmacenSrv -Djavax.net.ssl.trustStorePassword=1234567 Cliente |