INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
SOCKETS SEGUROS CONSOCKETS SEGUROS CONSOCKETS SEGUROS CON SOCKETS SEGUROS CON LIBRERÍAS DE OPENSSLLIBRERÍAS DE OPENSSL
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
PROTOCOLO DE SEGURIDAD SSLPROTOCOLO DE SEGURIDAD SSLPROTOCOLO DE SEGURIDAD SSLPROTOCOLO DE SEGURIDAD SSL
FASE 1
FASE 2
FASE 3
FASE 4
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Implementación del Protocolo Implementación del Protocolo SSL en SSL en OpenSSLOpenSSL
Se utilizan los objetos “SSL_CTX” y “SSL” – SSL_CTX (Objeto de Contexto): Se utiliza para configurar los
parámetros del protocoloparámetros del protocolo– SSL: El objeto SSL se asocia al objeto de contexto y hereda
sus parámetros– El objeto SSL se asocia también a un socket TCP– El objeto SSL se asocia también a un socket TCP
convencional
Para cargar los certificados de clave pública y l i d tili l f iclaves privadas se utilizan las funciones:– SSL_CTX_use_certificate() y SSL_CTX_use_PrivateKey()
Para verificar el certificado del servidor (u Para verificar el certificado del servidor (u opcionalmente el del cliente) se usan las clases:
– SSL_CTX_set_verify() y SSL_CTX_load_verify_locations();
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Variables y Funciones OpenSSLVariables y Funciones OpenSSL
#include <openssl/ssl.h>
Variable de Contexto SSL_CTX * m_ctx
Se inicializa la variable de contextoSe inicializa la variable de contextoSSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
Esta función verifica el certificado recibido de la otra entidadvoid SSL CTX set verify(SSL CTX *ctx,int mode, int (*callback)(int, X509 STORE CTX *));void SSL_CTX_set_verify(SSL_CTX ctx,int mode, int ( callback)(int, X509_STORE_CTX ));
Esta función carga los certificados que la entidad utiliza para verificar el certificado recibido de la otra parteint SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *Cafile, const char *CApath);
S bj t SSL i i i li l l d l i bl d t tSe crea un objeto SSL que se inicializa con los valores de la variable de contextoSSL * SSL_new(SSL_CTX *ctx);
Se asocia un socket tradicional al objeto SSL. El protocolo SSL se implementará en el socketint SSL set fd(SSL *s int socket);int SSL_set_fd(SSL s, int socket);
Se inicia el protocolo SSL del lado del clienteint SSL_connect(SSL *ssl);
Se envían datos por socket seguroint SSL_write(SSL *ssl,const void *buf,int num);Se reciben datos por el socket seguroint SSL_read(SSL *ssl,void *buf,int num);
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Variables y Funciones OpenSSLVariables y Funciones OpenSSL
#include <openssl/ssl.h>
Esta función se utiliza siempre en el servidor para cargar el certificado del protocolo SSL. Opcionalmente lad tili l li t t ti f t l idpuede utilizar el cliente para autenticarse frente al servidor
SSL_CTX_use_certificate(m_ctx, cert)
Esta función se utiliza siempre en el servidor para cargar la clave privada del certificado del protocolo SSL. Opcionalmente la puede utilizar el cliente para cargar la clave privada del certificado que presenta al servidorp p p g p q pcuando hay autenticación del cliente.SSL_CTX_use_PrivateKey(m_ctx, pkey)
Esta función la utiliza la entidad servidor para iniciar el protocolo SSL si todo ha ido bien (se han verificado losEsta función la utiliza la entidad servidor para iniciar el protocolo SSL si todo ha ido bien (se han verificado los certificados y se han recibido correctamente los mensajes del protocolo) se pueden intercambiardatos de forma seguraif (SSL_accept(ssl) < 0) { .... }
Esta función permite la obtención del certificado de la otra entidad a partir de la conexión SSLX509 * SSL_get_peer_certificate(const SSL *s);
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Certificados Necesarios para una Conexión Certificados Necesarios para una Conexión SSL sin Autenticación de ClienteSSL sin Autenticación de Cliente
openssl>
(Generación de un par clave pública‐privada)l i dgenrsa ‐out ClavePrivada.pem 4096
Generación de un Certificado Autofirmado)509 d 3650 k Cl P i d t C tifi dreq ‐new ‐x509 ‐days 3650 ‐key ClavePrivada.pem ‐out Certificado.pem
(Creamos un certificado en formato p12, con la clave privada incorporada protegida con un clave cifrada con 3des (“ppppp)protegida con un clave cifrada con 3des ( ppppp) pkcs12 ‐export ‐in Certificado.pem ‐inkey ClavePrivada.pem ‐out cert.p12
Ficheros Obtenidos: •cert.p12: Certificado de Clave pública+Clave privada•Certificado.pem: Certificado de Clave PúblicaCertificado.pem: Certificado de Clave Pública•ClavePrivada.pem: Clave privada
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL sin Autenticación de ClienteCertificado Servidor AutofirmadoCertificado Servidor Autofirmado
Conexión SSLCliente Servidor
CAFILE CERTIFICADO SERVIDOR“Certificado.pem” “cert.p12”
Certificado Servidor
#define CAFILE "Certificado.pemSSL_CTX * m_ctx=SSL_CTX_new(SSLv23_server_method());
Clave Privada + Certificado Servidor
SSL_CTX * m_ctx = SSL_CTX_new(SSLv23_method());
SSL_CTX_set_verify(m_ctx,SSL_VERIFY_PEER|SSL_VERIFY_FAIL IF NO PEER CERT NULL);
if (!GetCertAndPrivateKey(&cert, &pkey))SSL_CTX_use_certificate(m_ctx, cert) SSL_CTX_use_PrivateKey(m_ctx, pkey)
AIL_IF_NO_PEER_CERT, NULL);SSL_CTX_load_verify_locations(m_ctx, CAFILE, CADIR)
SSL * m_ssl=SSL_new(m_ctx);
s=connectTCP(host pto ser ice)
SSL *ssl = SSL_new(m_ctx);
sock = passiveTCP(service,5);*pssock=accept(sock,(&fsin,(int FAR*)&alen);
s=connectTCP(host,pto_service);
SSL_set_fd(m_ssl,s);if (SSL_connect(m_ssl) == -1) {}SSL_write(m_ssl,,)/ SSL_read(m_ssl,,);
SSL_set_fd(ssl,*pssock);
if (SSL_accept(ssl) < 0) { .... }SSL_read(ssl,,)/SSL_write(ssl,,)
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL con Autenticación de ClienteC tifi d Cli t /S id A t fi d
ClienteConexión SSL
Certificado Cliente/Servidor Autofirmado
ServidorCliente Servidor
“cert.p12”“Certificado.pem”“cert.p12”“Certificado.pem”
CERT CLIENTE= CERT SERVIDOR
# d fi CAFILE "C tifi d
CAFILE
Certificado Cliente
CERTIFICADO SERVIDOR
Clave Privada + Cert ServidorCertificado Servidor
CERTIFICADO CLIENTE
Clave Privada + Cert Cliente
CAFILE
#define CAFILE "Certificado.pem
SSL_CTX * m_ctx = SSL_CTX_new(SSLv23_method());
if (!GetCertAndPri ateKe (&cert &pke ))
# define CAFILE "Certificado.pemSSL_CTX * m_ctx=SSL_CTX_new(SSLv23_server_method());
if (!GetCertAndPrivateKey(&cert, &pkey))SSL_CTX_use_certificate(m_ctx, cert)
if (!GetCertAndPrivateKey(&cert, &pkey))SSL_CTX_use_certificate(m_ctx, cert) SSL_CTX_use_PrivateKey(m_ctx, pkey)
SSL_CTX_set_verify(m_ctx, ……);
( )SSL_CTX_use_PrivateKey(m_ctx, pkey)
SSL_CTX_set_verify(m_ctx,SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);SSL CTX load verify locations(m ctx CAFILE CADIR)
SSL_CTX_load_verify_locations(m_ctx, CAFILE, CADIR)
SSL * m_ssl=SSL_new(m_ctx);
s=connectTCP(host,pto service);
SSL_CTX_load_verify_locations(m_ctx, CAFILE, CADIR)
SSL *ssl = SSL_new(m_ctx);
sock = passiveTCP(service,5);* k t( k (&f i (i t FAR*)& l )s connectTCP(host,pto_service);
SSL_set_fd(m_ssl,s);if (SSL_connect(m_ssl) == -1) {}SSL_write(m_ssl,,)/ SSL_read(m_ssl,,);
*pssock=accept(sock,(&fsin,(int FAR*)&alen);
SSL_set_fd(ssl,*pssock);if (SSL_accept(ssl) < 0) { .... }SSL_read(ssl,,)/SSL_write(ssl,,)
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
SOCKETS SEGUROS EN JAVASOCKETS SEGUROS EN JAVASOCKETS SEGUROS EN JAVASOCKETS SEGUROS EN JAVA
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL C tifi d S idC tifi d S id A t fi dA t fi d (I)(I)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (I)(I)
Cliente ServidorConexión SSL
Truststore file Keystore File
Certificado Servidor(TrustCertEntry)
Clave Privada + Certificado Servidor(Key Entry)
“AlmacenTrust” “AlmacenSR”
( y) ( y y)
System.setProperty("javax.net.ssl.trustStore","AlmacenTrust");
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLS k tF t tD f lt()
System.setProperty("javax.net.ssl.keyStore","AlmacenSR");System.setProperty("javax.net.ssl.keyStorePassword","oooooo");
SSLS S k tF t l k tf tSSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(dirip, ptoint);
SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SLSocket sslsocket = (SSLSocket) sslserversocket.accept();
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL C tifi d S idC tifi d S id A t fi dA t fi d (II)(II)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (II)(II)
1. Generamos el par de claves pública y secreta y se almacenan en el almacen AlmacenSR
keytool -genkey -alias CertificadoAutofirmado -keyalg RSA -validity "100”-keystore AlmacenSR -keypass oooooo -storepass oooooo
keytool -list -v -keystore AlmacenSR
2 Generamos en un fichero .cer el certificado de clave publica
keytool -export -alias CertificadoAutofirmado -keystore AlmacenSR -rfc -fileCertAutofirmado.cer
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL C tifi d S idC tifi d S id A t fi dA t fi d (III)(III)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (III)(III)
3. Metemos el Certificado Autofirmado en un almacén para que lo use el Cliente
keytool -import -alias CertificadoAutofirmado -file CertAutofirmado.cerkeytool import alias CertificadoAutofirmado file CertAutofirmado.cer -keystore AlmacenTrust
keytool -list -v -keystore AlmacenTrusty y
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (IV)(IV)
>keytool -genkey –alias CertificadoAutofirmado -keyalg RSA -validity "100" -keystore AlmacenSR-keypass oooooo -storepass oooooo
+Cuales son su nombre y su apellido?[Unknown]: alumno1
+Cual es el nombre de su unidad de organizacion?[Unknown]: fim[ ]
+Cual es el nombre de su organizacion?[Unknown]: upm
+Cual es el nombre de su ciudad o localidad?[Unknown]: boa[ ]
+Cual es el nombre de su estado o provincia?[Unknown]: ma
+Cual es el c¾digo de paÝs de dos letras de la unidad?[Unknown]: es
+Es correcto CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=es?[no]: y
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado Servidor Autofirmado (V)Certificado Servidor Autofirmado (V)
>keytool -list -v -keystore AlmacenSR
Escriba la contrase±a del almacÚn de claves: oooooo
ÚTipo de almacÚn de claves: jksProveedor de almacÚn de claves: SUN
Su almacÚn de claves contiene entrada 1
Nombre de alias: certificadoautofirmadoFecha de creaci¾n: 22-sep-2009Tipo de entrada: keyEntryLongitud de la cadena de certificado: 1Certificado[1]:Propietario: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esEmisor: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esN·mero de serie: 4ab8a8c8Vßlido desde: Tue Sep 22 12:36:56 CEST 2009 hasta: Thu Dec 31 11:36:56 CET 2009Huellas digitales del certificado:
MD5: BC:F1:49:9A:02:5E:2E:91:27:C4:F9:FA:E3:3B:35:0ASHA1: 45:A7:23:A0:BB:60:FE:7A:FA:C9:6F:B3:8E:CF:2E:D8:F6:3A:02:1E
*******************************************
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL C tifi d S idC tifi d S id A t fi dA t fi d (VI)(VI)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (VI)(VI)
>keytool -export –alias CertificadoAutofirmado -keystore AlmacenSR -rfc -file CertAutofirmado.cer
Escriba la contrase±a del almacÚn de claves: ooooooEscriba la contrase±a del almacÚn de claves: ooooooCertificado almacenado en el archivo <CertAutofirmado.cer>
>keytool -import –alias CertificadoAutofirmado -file CertAutofirmado.cer -keystore AlmacenTrustEscriba la contrase±a del almacÚn de claves: ooooooEscriba la contrase±a del almacÚn de claves: ooooooPropietario: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esEmisor: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esN·mero de serie: 4ab8a8c8Vßlido desde: Tue Sep 22 12:36:56 CEST 2009 hasta: Thu Dec 31 11:36:56 CET 2009Vßlido desde: Tue Sep 22 12:36:56 CEST 2009 hasta: Thu Dec 31 11:36:56 CET 2009Huellas digitales del certificado:
MD5: BC:F1:49:9A:02:5E:2E:91:27:C4:F9:FA:E3:3B:35:0ASHA1: 45:A7:23:A0:BB:60:FE:7A:FA:C9:6F:B3:8E:CF:2E:D8:F6:3A:02:1E
+Confiar en este certificado? [no]: yConfiar en este certificado? [no]: ySe ha a±adido el certificado al almacÚn de claves
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (VII)(VII)
>keytool -list -v -keystore AlmacenTrust
Escriba la contrase±a del almacÚn de claves: oooooo
Tipo de almacÚn de claves: jksProveedor de almacÚn de claves: SUN
Su almacÚn de claves contiene entrada 1Su almacÚn de claves contiene entrada 1
Nombre de alias: certificadoautofirmadoFecha de creaci¾n: 22-sep-2009Tipo de entrada: trustedCertEntryTipo de entrada: trustedCertEntry
Propietario: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esEmisor: CN=alumno1, OU=fim, O=upm, L=boa, ST=ma, C=esN·mero de serie: 4ab8a8c8N·mero de serie: 4ab8a8c8Vßlido desde: Tue Sep 22 12:36:56 CEST 2009 hasta: Thu Dec 31 11:36:56 CET 2009Huellas digitales del certificado:
MD5: BC:F1:49:9A:02:5E:2E:91:27:C4:F9:FA:E3:3B:35:0ASHA1: 45:A7:23:A0:BB:60:FE:7A:FA:C9:6F:B3:8E:CF:2E:D8:F6:3A:02:1ESHA1: 45:A7:23:A0:BB:60:FE:7A:FA:C9:6F:B3:8E:CF:2E:D8:F6:3A:02:1E
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado ServidorCertificado Servidor AutofirmadoAutofirmado (VIII)(VIII)
import java.net.*;
Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (VIII)(VIII)Código clienteCódigo cliente
import java.io.*;import javax.net.ssl.*;import java.util.*;public class EchoClient {{
public static voidmain(String[] arstring)
{try {
String dirip;String dirip;System.setProperty("javax.net.ssl.trustStore","AlmacenTrust");
InputStreamReader Flujo = new InputStreamReader(System.in);BufferedReader teclado = new BufferedReader(Flujo);S t t i t("Di i IP " )System.out.print("Direccion IP: " );dirip=teclado.readLine();
System.out.print("Puerto:" );Scanner sc =new Scanner(System.in);( y );String pto= sc.nextLine();int ptoint= Integer.parseInt(pto);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();SSLSocket sslsocket = (SSLSocket) sslsocketfactory createSocket(dirip ptoint);SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(dirip, ptoint);
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado ServidorCertificado Servidor AutofirmadoAutofirmado (IX)(IX)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (IX)(IX)
Código clienteCódigo cliente
InputStream inputstream = System.in;InputStreamReader inputstreamreader = new InputStreamReader(inputstream);BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
OutputStream outputstream = sslsocket.getOutputStream();p p g p ();OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);String string = null;
InputStream inputstream2 = sslsocket getInputStream();InputStream inputstream2 = sslsocket.getInputStream();InputStreamReader inputstreamreader2 = new InputStreamReader(inputstream2);BufferedReader bufferedreader2 = new BufferedReader(inputstreamreader2);
while (!(string = bufferedreader.readLine()).equals("")) {b ff d it it ( t i '\ ')bufferedwriter.write(string + '\n');bufferedwriter.flush();System.out.println(bufferedreader2.readLine() );
}
} catch (Exception exception)
{exception.printStackTrace();
}}}//main
}//public
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado ServidorCertificado Servidor AutofirmadoAutofirmado (X)(X)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (X)(X)
Código ServidorCódigo Servidor
import java.net.*; // Para ServerSocketimport java.util.*;import javax.net.ssl.*; // Para SSLSocketsimport java.io.*; //entrada/salida
public class EchoServer {public static void
main(String[] arstring){
PrintStream p;PrintStream p;try {
System.setProperty("javax.net.ssl.keyStore","AlmacenSR");System.setProperty("javax.net.ssl.keyStorePassword","oooooo");
SSLS S k tF t l k tf t (SSLS S k tF t )SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();( ) p ();
p=new PrintStream(sslsocket.getOutputStream());InputStream inputstream = sslsocket.getInputStream();InputStreamReader inputstreamreader = new InputStreamReader(inputstream);BufferedReader bufferedreader = new BufferedReader(inputstreamreader);BufferedReader bufferedreader = new BufferedReader(inputstreamreader);String string = null;
SSLSession sesion = sslsocket.getSession();System.out.println("Host: "+sesion.getPeerHost());
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL Conexión SSL Certificado ServidorCertificado Servidor AutofirmadoAutofirmado (XI)(XI)Certificado Servidor Certificado Servidor AutofirmadoAutofirmado (XI)(XI)
Código ServidorCódigo Servidor
while ((string = bufferedreader.readLine()) != null) {System.out.println(string);System.out.flush();Thread.currentThread().sleep(1000);Thread.currentThread().sleep(1000);p.println(string);
}
}
catch (Exception exception){
exception.printStackTrace();}
}//main}//public
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL con Autenticación Cliente (I) Conexión SSL con Autenticación Cliente (I) Certificado Servidor/ClienteCertificado Servidor/Cliente autofirmadoautofirmadoCertificado Servidor/Cliente Certificado Servidor/Cliente autofirmadoautofirmado
Conexión SSLCliente Servidor
“AlmacenTrust” “AlmacenSR”“AlmacenTrust”“AlmacenCL”
“AlmacenCL” = “AlmacenSR”
Truststore file Cliente
Certificado Autofirmado
Keystore File Cliente
Clave Priv + Cert
Truststore file ServidorKeystore File Servidor
Clave Priv + Cert
AlmacenTrust AlmacenSR
Certificado Autofirmado
AlmacenTrustAlmacenCL
System.setProperty("javax.net.ssl.trustStore","AlmacenTrust"); System.setProperty("javax.net.ssl.keyStore","AlmacenSR");S t tP t ("j t l k St P d" ” ")
Certificado Autofirmado(TrustCertEntry)
Clave Priv + Cert Autofirmado (Key Entry)
Clave Priv Cert Autofirmado (Key Entry)
Certificado Autofirmado(TrustCertEntry)
System.setProperty("javax.net.ssl.keyStore","AlmacenCL");System.setProperty("javax.net.ssl.keyStorePassword",” oooooo");
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
System.setProperty("javax.net.ssl.keyStorePassword",” ooooooo");System.setProperty("javax.net.ssl.trustStore","AlmacenTrust");
SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(dirip, ptoint);
SSLServerSocket sslserversocket =(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);sslserversocket.setNeedClientAuth(true);
SLSocket sslsocket = (SSLSocket) sslserversocket accept();SLSocket sslsocket = (SSLSocket) sslserversocket.accept();
INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS
Conexión SSL con Autenticación Cliente (II) Conexión SSL con Autenticación Cliente (II) Certificado Servidor/ClienteCertificado Servidor/Cliente autofirmadoautofirmado
import java.security.cert.X509Certificate; // para Manejo del Certificados
Certificado Servidor/Cliente Certificado Servidor/Cliente autofirmadoautofirmado
// OBTENCION DE LA SESION Y DEL CERTIFICADO RECIBIDO DEL SERVIDOR Y EN EL CLIENTE
SSLSession sesion = sslsocket.getSession();
System.out.println("Host: "+sesion.getPeerHost());
X509Certificate certificate = (X509Certificate)sesion.getPeerCertificates()[0]
System.out.println("Propietario: "+certificate.getSubjectDN());System.out.println("Emisor: "+certificate.getIssuerDN());System.out.println("Numero Serie: "+certificate.getSerialNumber() );S t t i tl ("t t i " tifi t t St i () )System.out.println("to string: "+certificate.toString() );
byte[] buf = certificate.getEncoded();Fil O t tSt Fil O t tSt (" ")FileOutputStream os = new FileOutputStream("server.cer");ó FileOutputStream os = new FileOutputStream(“cliente.cer");
os.write(buf);l ()os.close();
Top Related