- Prácticas de programación segura.
- Criptografía de clave pública y clave privada.
- Principales aplicaciones de la criptografía.
- Protocolos criptográficos.
- Política de seguridad.
- Programación de mecanismos de control de acceso.
- Encriptación de información.
- Protocolos seguros de comunicaciones.
- Programación de aplicaciones con comunicaciones seguras.
===================
EN EL SERVIDOR:
keytool -genkey -alias servidor -keyalg RSA -keystore AlmacenSrv -storepass 1234567
keytool -exportcert -alias servidor -keystore AlmacenSrv -storepass 1234567 -file CertificadoServ.cer
keytool -importcert -trustcacerts -alias servidor -file CertificadoServ.cer -keystore CliCertConfianza -storepass 1234567
===================
EJECUCIÓN EN EL SERVIDOR
java -Djavax.net.ssl.keyStore=AlmacenSrv -Djavax.net.ssl.keyStorePassword=1234567 ServidorSSL
===================
===================
EN EL CLIENTE:
keytool -genkey -alias cliente -keyalg RSA -keystore AlmacenCli -storepass clavecli
keytool -exportcert -alias cliente -keystore AlmacenCli -storepass clavecli -file CertificadoCli.cer
keytool -importcert -trustcacerts -alias cliente -file CertificadoCli.cer -keystore SrvCertConfianza -storepass cercli
===================
EJECUCIÓN CLIENTE:
java -Djavax.net.ssl.trustStore=CliCertConfianza -Djavax.net.ssl.trustStorePassword=cercli ClienteSSL
=====================
System.setProperty("javax.net.ssl.keyStore","AlmacenSrv2")
System.setProperty("javax.net.ssl.keyStorePassword","1234567")
System.setProperty("javax.net.ssl.trustStore","AlmacenSrv2")
System.setProperty("javax.net.ssl.trustStorePassword","1234567")
import java.io.*;
import javax.net.ssl.*;
public class ServidorSSL {
public static void main(String[] arg) throws IOException {
int puerto = 6000;
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 < 5; 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();
}// main
}// java -Djavax.net.ssl.keyStore=AlmacenSrv -Djavax.net.ssl.keyStorePassword=1234567 ServidorSSL
import java.io.*;
import javax.net.ssl.*;
public class ClienteSSL {
public static void main(String[] args) throws Exception {
String Host = "localhost";
int puerto = 6000;//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();
}// main
}// java -Djavax.net.ssl.trustStore=AlmacenSrv -Djavax.net.ssl.trustStorePassword=1234567 ClienteSSL
import java.io.*;
import javax.net.ssl.*;
public class ClienteSSL {
public static void main(String[] args) throws Exception {
String Host = "localhost";
int puerto = 6000;//puerto remoto
// Propiedades JSSE)
System.setProperty("javax.net.ssl.trustStore","AlmacenSrv2");
System.setProperty("javax.net.ssl.trustStorePassword","1234567");
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();
}// main
}//..ClienteSSLv
import java.io.*;
import javax.net.ssl.*;
public class ClienteSSL {
public static void main(String[] args) throws Exception {
String Host = "localhost";
int puerto = 6000;//puerto remoto
// Propiedades JSSE)
System.setProperty("javax.net.ssl.trustStore","AlmacenSrv2");
System.setProperty("javax.net.ssl.trustStorePassword","1234567");
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();
}// main
}//..ClienteSSLv
https://docs.oracle.com/cd/E19798-01/821-1841/gjrgy/index.html
http://chuwiki.chuidiang.org/index.php?title=Socket_SSL_con_Java