Skip to content

Latest commit

 

History

History
206 lines (168 loc) · 6.81 KB

2019-02-28.md

File metadata and controls

206 lines (168 loc) · 6.81 KB

Utilización de técnicas de programación segura:

  • 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.

Comandos para Keytool

===================
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
=====================

Propiedades JSSE

Servidor

System.setProperty("javax.net.ssl.keyStore","AlmacenSrv2")
System.setProperty("javax.net.ssl.keyStorePassword","1234567")

Cliente

System.setProperty("javax.net.ssl.trustStore","AlmacenSrv2")
System.setProperty("javax.net.ssl.trustStorePassword","1234567")

Ejemplo de conexión entre cliente-servidor SSL (sin propiedades JSSE)

Servidor SSL

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 

Cliente SSL

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

Ejemplo de conexión entre cliente-servidor SSL (con propiedades JSSE)

Servidor SSL

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

Cliente SSL

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

Socket SSL

To Use keytool to Create a Server Certificate

https://docs.oracle.com/cd/E19798-01/821-1841/gjrgy/index.html

Socket SSL con Java

http://chuwiki.chuidiang.org/index.php?title=Socket_SSL_con_Java

SSL/TLS for dummies part 3 – Understanding Certificate Authority

https://www.wst.space/ssl-part-3-certificate-authority/