Programación de Seguridad en Java Sesión 3 Firma Digital y...

39
Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados1 Especialista en Aplicaciones y Servicios Web con Java Enterprise Programación de Seguridad en Java Sesión 3 Firma Digital y Certificado Digital

Transcript of Programación de Seguridad en Java Sesión 3 Firma Digital y...

Page 1: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados1

Especialista en Aplicaciones y Servicios Web con Java Enterprise

Programación de Seguridad en Java

Sesión 3Firma Digital y Certificado

Digital

Page 2: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados2

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “kestore”Certificados en javaCrear nuestra propia CA

Índice

Page 3: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados3

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “kestore”Certificados en javaCrear nuestra propia CA

Autentificación por firma digital

Page 4: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados4

Carácterísticas: Firma digital consiste en la asociación de la identidadde un individuo a unos datos (p.e. e-mail)Conceptualmente, una firma no es más que un “digest”procesado por una determinada clave privada asociada al usuario que firma. Pasos a seguir ante la recepción de un mensaje:• Obtener el “digest” del mensaje (“digest2”)• Usar la clave pública del remitente para extraer el digest de la

firma (“digest1”).• Validar sii “digest1” = “digest2”

Autentificación por firma digital

Page 5: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados5

Esquema (emisor):

Autentificación por firma digital

hola

SHA-1

Alg Firma

Clave privada

Enviado a receptor

hola

digest1

firma

Page 6: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados6

Esquema (receptor):

Autentificación por firma digital

Enviado por emisor

hola

firma

Clave priva

SHA-1

Alg Firma

digest2

digest1

Clave Pública

del emisor

¿?

Page 7: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados7

Clase Signature1. Obtener instancia especificando algoritmo:

getInstance()

2. Inicializar con una clave privada: initSign()3. Recogida (preparación) de datos: update()4. Firmar los datos y devolver firma: sign()

5. Inicializar con clave pública: initVerify()6. Recogida de datos que fueron firmados: update()7. Verificación: verify()

Autentificación por firma digital

Page 8: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados8

Ejemplo FirmaDigital.java

Signature firma = Signature.getInstance("MD5WithRSA");

firma.initSign(parClaves.getPrivate());

// Prepara la firma de los datosfirma.update(datos);

// Firmar los datosbyte[] bytesFirma = firma.sign();

Autentificación por firma digital

Page 9: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados9

Ejemplo FirmaDigital.java

firma.initVerify(parClaves.getPublic());// Pasar los datos que fueron firmadosfirma.update(datos);// Verificarboolean verificado = false;try {

verificado = firma.verify(bytesFirma);} catch (SignatureException se) {verificado = false;

}

Autentificación por firma digital

Page 10: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados10

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “kestore”Certificados en javaCrear nuestra propia CA

Certificados digitales: contenidos

Page 11: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados11

Motivación: Garantizar que cuando se utiliza una clave pública para validar una firma dicha clave se corresponde con la identidad adecuada. Certificado digital: clave pública + información de identidad firmadas con la clave privada de un tercero (Certificate Authority o CA) Verisign/ThawteLos certificados permiten establecer confianza. Si nuestra MV (JDK) confía (trust) en una determinada CA, entonces aceptará sin reservas todos los certificados que ésta emita.

Certificados digitales: contenidos

Page 12: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados12

Contenidos: X.509v1 Version: V1, V2, V3Serial Number: Identificador (número entero largo)Signature Algorithm: Algoritmo de firma (p.e. MD5 con RSA)Validity: Intervalo (en fechas) de validezSubject: Identidad X.500 del sujeto en cuestiónSubject Public Key: Clave pública del “subject”(asunto)Signature: Firma propiamente dicha (para que podamos compararla frente a la clave pública de la CA).

Certificados digitales: contenidos

Page 13: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados13

Contenidos: X.509v2 Issuer Unique Identifier: Por si el mismo nombre X.500 se usa para diferentes emisores de certificados.Subject Unique Identifier: Por si dos sujetos tienen el mismo nombre X.500

Contenidos: X.509v3 Subject and Issuer Attributes: Info adicional.Key Usage and Policies: Especificar cómo usar el certificado y sus claves (p.e. “solo encriptación”)Certification Path Constraints: Especificar qué certificados pueden crearse a partir de otros.

Certificados digitales: contenidos

Page 14: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados14

Certificados digitales: contenidos

Page 15: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados15

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “kestore”Certificados en javaCrear nuestra propia CA

Generando certificados: “keytool” y “keystore”

Page 16: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados16

“keystores” en Java: Almacenes de certificados y claves. “keystore” por defecto: $HOME/.keystoreCertificados “trusted” (activos válidos)Claves (simétricas o bien privadas) que pueden usarse para encriptación y/o firma digital. Deben estar asociadas a certificados para esas claves.A pesar de que el acceso al “keystore” está protegido por password es conveniente evitarlos para almacenar claves privadas.

Generando certificados: “keytool” y “keystore”

Page 17: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados17

keytool: manejo de “keystores”-certreq: Petición de certificado para una CA.-delete: Borrar entrada del “keystore”-genkey: Genera un par de claves para un certificado

“auto-firmado”. Se puede especificar el algoritmo con -keyalg (p.e. –keyalg RSA)

-keystore: Especifica un fichero como almacén-printcert: Mostrar un certificado digital-selfcert: Genera un certificado autofirmado-export: Exportar certificado de un almacén (en DER).

Generando certificados: “keytool” y “keystore”

Page 18: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados18

Ejemplos:keytool –v -list (Lista las entradas de.keystore)keytool –genkey –alias test (Añadir una entrada cuyo alias es “test”. La aplicación nos irá pidiendo los datos para completar el certificado)keytool –export –alias test –file micertificado.cer (Exporta el certificado cuyo alias es “test” para que sea posteriormente instalable).

Generando certificados: “keytool” y “keystore”

Page 19: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados19

Generando certificados: “keytool” y “keystore”Tipo de almacén de claves: jks

Proveedor de almacén de claves: SUN

Su almacén de claves contiene entrada 1

Nombre de alias: test

Fecha de creación: 27-ene-2004

Tipo de entrada: keyEntry

Longitud de la cadena de certificado: 1

Certificado[1]:

Propietario: CN=Francisco Escolano, OU=DCCIA, O=UA, L=Alicante, ST=Alicante, C=ES

Emisor: CN=Francisco Escolano, OU=DCCIA, O=UA, L=Alicante, ST=Alicante, C=ES

Número de serie: 401698e8

Válido desde: Tue Jan 27 17:59:20 CET 2004 hasta: Mon Apr 26 18:59:20 CEST 2004

Huellas digitales del certificado:

MD5: BD:1B:89:4C:5D:7B:D3:92:2A:D7:99:21:05:5F:87:AD

SHA1: 6A:BA:37:07:55:42:E4:A9:18:03:2A:1C:C6:E2:93:BA:30:42:CF:A5

*******************************************

*******************************************

Page 20: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados20

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “keystore”Certificados en javaCrear nuestra propia CA

Certificados en Java

Page 21: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados21

Clases de java.security.certCertificateFactory: Generador de instancias de objetos CertificateCertificate: Clase abstracta que encapsula un certificado. • getPublicKey() devuelve la clave pública del “subject”• verify() tomando como argumento la clave pública de la CA

verifica la firma del certitificado.

X509Certificate: Manejo de certificados X.509.Imprimir un *.cer: ImprimirCert.java

Certificados en Java

Page 22: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados22

Certificados en Java

CertificateFactory factoria = CertificateFactory.getInstance("X.509");

// Abrir el fichero FileInputStream fis = new FileInputStream (args[0]);

// Generar certificado para el fichero Certificate cert = factoria.generateCertificate(fis);fis.close();

// Imprimir información System.out.println(cert);

Page 23: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados23

Certificados en Java

[[Version: V1Subject: CN=Francisco Escolano, OU=DCCIA, O=UA, L=Alicante, ST=Alicante, C=ESSignature Algorithm: SHA1withDSA, OID = 1.2.840.10040.4.3

Key: Sun DSA Public KeyParameters:DSA

p: fd7f5381 1d751229 52df4a9c 2eece4e7 f611b752 3cef4400 c31e3f80 b6512669455d4022 51fb593d 8d58fabf c5f5ba30 f6cb9b55 6cd7813b 801d346f f26660b76b9950a5 a49f9fe8 047b1022 c24fbba9 d7feb7c6 1bf83b57 e7c6a8a6 150f04fb83f6d3c5 1ec30235 54135a16 9132f675 f3ae2b61 d72aeff2 2203199d d14801c7

q: 9760508f 15230bcc b292b982 a2eb840b f0581cf5g: f7e1a085 d69b3dde cbbcab5c 36b857b9 7994afbb fa3aea82 f9574c0b 3d078267

5159578e bad4594f e6710710 8180b449 167123e8 4c281613 b7cf0932 8cc8a6e13c167a8b 547c8d28 e0a3ae1e 2bb3a675 916ea37f 0bfa2135 62f1fb62 7a01243bcca4f1be a8519089 a883dfe1 5ae59f06 928b665e 807b5525 64014c3b fecf492a

y:7f85d0b3 a2cc136e e64f6aa0 558ccfaf 1702493c 0abc6cb7 8949bf0f f93945964925a98b bbdc1455 fcba992d 78ba6a58 02e7f216 23f059b7 3575875f af9d281c7daf0c78 acbb82ed ea7e8a8c 38ad39cc 92ad579a af470c20 932a6dda 69e985bb5303c6d4 59cb3b0b 034d0709 52667938 2ae86398 716450e5 ad6a5fdd ca901dbb

Validity: [From: Tue Jan 27 17:59:20 CET 2004,To: Mon Apr 26 18:59:20 CEST 2004]

Issuer: CN=Francisco Escolano, OU=DCCIA, O=UA, L=Alicante, ST=Alicante, C=ESSerialNumber: [ 401698e8]

]Algorithm: [SHA1withDSA]Signature:

0000: 30 2C 02 14 14 5A 94 5E 68 43 2B 37 35 4D 91 FD 0,...Z.^hC+75M..0010: 85 BC 34 1D 30 F1 68 7E 02 14 18 21 91 16 BF A7 ..4.0.h....!....0020: 5C D3 54 6D 21 B2 1A 69 6A 2D 8B 54 6A D4 \.Tm!..ij-.Tj.]

Page 24: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados24

Clase java.security.KeyStoreManejo de “keystores” por código Java. load(): Cargar el “keystore” si le pasamos el nombre de fichero asociado a dicho almacén (p.e. .keystore) y el password asociado. getCertificate(): Obtener el objeto Certificateasociado a un determinado alias.

Imprimir desde un determinado “keystore”: ImprimirCertKS.java.

Certificados en Java

Page 25: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados25

Certificados en Java

// Abrir el keystoreFileInputStream fIn = new FileInputStream(fich_keystore);KeyStore keystore = KeyStore.getInstance("JKS");

// Cargar el keystorekeystore.load(fIn, password);

// Obtener el certificadoCertificate cert = keystore.getCertificate(alias);

// Mostrar el certificadoSystem.out.println(cert);

Page 26: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados26

Autentificación por firma digitalCertificados digitales: contenidosGenerando certificados: “keytool” y “keystore”Certificados en javaCrear nuestra propia CA

Crear nuestra propia CA

Page 27: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados27

Motivación: Parte de la infraestructura de clave pública (PKI). Queremos emitir nuestros propios certificados: • E-mail: emitir certificados de e-mail para que todos los

miembros de nuestra organización puedan firmar su correo.• Crear certificados para validar el acceso de nuestros clientes a

nuestras bases de datos. Usar el paquete sun.security.x509 (aunque no se recomienda en general puesto que no es 100% Java y porque pueden causar interferencias de seguridad).

Crear nuestra propia CA

Page 28: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados28

Clases sun.security.x509X509CertImpl: Implementación de un CertificateX.509 que podremos firmar con sign()X509CertInfo: Encapsula los atributos del certificado y permite instanciarlos en el momento de crearlo.X500Name: Nombre X.500 (CN,OU,….)AlgorithmId: Identifica algoritmo criptográficoCertificateSubjectName, CertificateValidity, CertificateSerialNumber, CertificateIssuerName, CertificateAlgorithmID,

Crear nuestra propia CA

Page 29: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados29

Pasos a seguir:1. Crear certificado y clave privada para nuestra CA:

keytool –genkey –v -alias CA –keyalg RSA –keystore almacen

2. Crear un certificado que queramos firmar keytool -genkey –v alias miClave –keyalg RSA –keystore almacen

3. Reemplazar el certificado que acabamos de crear (que es auto-firmado) por otro que sea firmado por nuestra CA, usando el certificado y la clave privada de la CA. Ver el ejemplo: FirmarCertificado.java

Crear nuestra propia CA

Page 30: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados30

FirmarCertificado.java1. Leer clave privada y certificado de la CA:

Crear nuestra propia CA

PrivateKey clavePrivadaCA = (PrivateKey)keystore.getKey(aliasCA, passwordCA);

java.security.cert.Certificate certificadoCA = keystore.getCertificate(aliasCA);

Page 31: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados31

FirmarCertificado.java2. Crear una implementación X.509 para el certificado de la

CA:

Crear nuestra propia CA

byte[] codificado = certificadoCA.getEncoded(); X509CertImpl implementacionCA = newX509CertImpl(codificado);

X509CertInfo infoCA = (X509CertInfo)implementacionCA.get(X509CertImpl.NAME + "." + X509CertImpl.INFO);X500Name emisorCA = (X500Name)infoCA.get(X509CertInfo.SUBJECT + "." + CertificateIssuerName.DN_NAME);

Page 32: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados32

FirmarCertificado.java3. Leer la clave privada y el certificado a firmar:

Crear nuestra propia CA

java.security.cert.Certificate cert = keystore.getCertificate(aliasCert);

PrivateKey clavePrivada = (PrivateKey)keystore.getKey(aliasCert, passwordCert);

Page 33: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados33

FirmarCertificado.java4. Crear de nuevo una implementación X.509 para el

certificado a firmar:

Crear nuestra propia CA

codificado = cert.getEncoded();

X509CertImpl implementacionCert = newX509CertImpl(codificado);

X509CertInfo infoCert = (X509CertInfo)implementacionCert.get

(X509CertImpl.NAME + "." + X509CertImpl.INFO);

Page 34: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados34

5. Especificar y almacenar el período de validez:

6. Crear y almacenar el número de serie:

Crear nuestra propia CA

Date inicio = new Date();

Date fin = new Date(inicio.getTime() + VALIDEZ*24*60*60*1000L);

CertificateValidity intervalo = newCertificateValidity(inicio, fin);

infoCert.set(X509CertInfo.SERIAL_NUMBER, newCertificateSerialNumber((int)(inicio.getTime()/1000)));

Page 35: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados35

5. Especificar y almacenar el período de validez:

6. Crear y almacenar el número de serie:

Crear nuestra propia CA

Date inicio = new Date();

Date fin = new Date(inicio.getTime() + VALIDEZ*24*60*60*1000L);

CertificateValidity intervalo = newCertificateValidity(inicio, fin);

infoCert.set(X509CertInfo.SERIAL_NUMBER, newCertificateSerialNumber((int)(inicio.getTime()/1000)));

Page 36: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados36

9,10. Crear el nuevo certificado y firmarlo:

11,12. Almacenar en el “keystore” y éste en un fichero:

Crear nuestra propia CA

X509CertImpl nuevoCert = new X509CertImpl(infoCert);

nuevoCert.sign(clavePrivadaCA, ALG);

keystore.setKeyEntry(aliasNuevo, clavePrivada, passwordCert, new java.security.cert.Certificate[] { nuevoCert } );

FileOutputStream output = newFileOutputStream(fich_keystore); keystore.store(output, password); output.close();

Page 37: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados37

Para aplicar esta firma:

java FirmarCertificado almacen CA miClave miClave2

Para ver el nuevo certificado: keytool –list –v –keystore almacen

Para exportar certificado de la CA a .crt:

keytool –export –alias CA –keystore almacen –file CA.crt

Crear nuestra propia CA

Page 38: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados38

Crear nuestra propia CA

Nombre de alias: miclave2Fecha de creación: 28-ene-2004Tipo de entrada: keyEntryLongitud de la cadena de certificado: 1Certificado[1]:Propietario: CN="Francisco ", OU=j2ee, O=Unknown, L=Unknown, ST=Unknown, C=UnknownEmisor: CN=CA, OU=j2ee, O=Unknown, L=Unknown, ST=Unknown, C=UnknownNúmero de serie: 4017e829Válido desde: Wed Jan 28 17:49:45 CET 2004 hasta: Thu Jan 27 17:49:45 CET 2005Huellas digitales del certificado:

MD5: 2A:47:49:9B:A5:22:06:4C:7A:63:FD:64:4D:75:42:BDSHA1: CD:00:93:64:3B:61:B0:A8:2A:3F:D1:32:DC:2D:B0:7B:AB:EB:01:44

**************************************************************************************

Page 39: Programación de Seguridad en Java Sesión 3 Firma Digital y ...jtech.ua.es/j2ee/2003-2004/modulos/sj/sesion03-traspas.pdf · Programación de Seguridad en Java © 2003-2004 Depto.

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Certificados39

Ejercicio4.java…Validez de los certificados. Usar keytool para generar un certificado auto-firmado y almacenarlo en un “keystore”.Comprobar que el certificado es válido dentro de las fechas.

Ejercicio5.java…Firmar con una clave nueva. Utilizar sun.security.x509Imprimir el “keystore”

Ejercicios…