5. administracioìn de claves y certificados

42
Criptografía en aplicaciones Java Administración de claves y certificados

description

 

Transcript of 5. administracioìn de claves y certificados

Page 1: 5. administracioìn de claves y certificados

Criptografía en aplicaciones Java

Administración de claves y certificados

Page 2: 5. administracioìn de claves y certificados

Índice de contenidos

Introducción. Herramienta keytool. Infraestructura de clases.

Clase KeyStore.APIs para la gestión.

Page 3: 5. administracioìn de claves y certificados

Introducción

La administración de claves constituye uno de los aspectos más apasionantes del establecimiento de un sistema de seguridad.

La administración de claves, a partir de JDK 1.2, se basa en el concepto de almacén de claves (Keystore).

Definición: contenedor de claves secretas, pares de claves pública-secreta y certificados que prueban la validez de una clave pública.

Page 4: 5. administracioìn de claves y certificados

Introducción

Existen una serie de tareas importantes:Generación de claves.Almacenamiento de claves.Acuerdo/Distribución de claves.Verificación de claves.

Para manejar todo esto de una forma potente aparece el concepto de Keystore:

Base de datos, protegida por un password, que contiene claves y certificados.

Page 5: 5. administracioìn de claves y certificados

Introducción

Page 6: 5. administracioìn de claves y certificados

Introducción

Un almacén de claves puede contener dos tipos de entradas:

Entrada de clave.Entrada de certificado fiable.

Cada una de las entradas de un Keystore está asociada a un único alias, nos permiten identificar dichas entradas cuando queremos recuperarlas.

Page 7: 5. administracioìn de claves y certificados

Introducción

Las bibliotecas criptográficas de Java proporcionan soporte para tres tipos de almacenes de clave:

JKS: almacén de claves disponible en el JDK tradicionalmente (proveedor “SUN”).JCEKS: almacén de claves (proveedor “SunJCE”).PKCS12: almacén de claves (proveedor “SunJSSE”).

JCEKS debe utilizarse si, de alguna forma, se necesita utilizar funcionalidades de la extensión criptográfica de Java, en cualquier otro caso no será necesario.

Page 8: 5. administracioìn de claves y certificados

Introducción

Los almacenes de claves pueden gestionarse de dos formas diferentes:

Mediante una herramienta en línea de comandos, keytool.De forma programática aprovenchando la API que proporciona toda implementación de seguridad.

Se analizan a continuación ambas alternativas.

Page 9: 5. administracioìn de claves y certificados

Herramienta keytool

Esta herramienta se encarga de administrar claves.

Es una utilidad incluida en JRE. Permite crear nuevas claves, importar

certificados digitales, exportar claves existentes y, en general, interactuar con el sistema de gestión de claves.

Page 10: 5. administracioìn de claves y certificados

Herramienta keytool

Trabaja en línea de comandos:

Page 11: 5. administracioìn de claves y certificados

Herramienta keytool

Trabaja en línea de comandos:La sintaxis a utilizar es muy simple:

>keytool -opcion1 valor1 -opcion2 valor2 ...

Page 12: 5. administracioìn de claves y certificados

Herramienta keytool

Opciones Globales:−alias alias.−dname distinguishedName.−keypass password.−keystore filename.−storepass password.−storetype storetype.−v.

Page 13: 5. administracioìn de claves y certificados

Herramienta keytool

Vamos a describir a continuación un conjunto de operaciones habituales:

Creación de una entrada para clave.Generación de una petición de certificado.Importación de un certificado.Creación de una entrada para certificado.Modificación de entradas de almacén de claves.Borrado de entradas de almacén de claves.Exploración de los datos de un almacén.Cambio de clave.

Page 14: 5. administracioìn de claves y certificados

Creación de una entrada para clave

Opción -genkey:Se puede crear una nueva clave sobre el almacén por defecto: Almacén por defecto: .keystore . No se utiliza la opción -keystore . Para acceder al almacén debemos conocer su clave de

acceso.

Se puede crear una nueva clave sobre un nuevo almacén: Se utiliza la opción -keystore. Creamos un password asociado al nuevo almacén de

claves.

Page 15: 5. administracioìn de claves y certificados

Creación de una entrada para clave

Almacén por defecto:

Page 16: 5. administracioìn de claves y certificados

Creación de una entrada para clave

Una nueva clave sobre un nuevo almacén:

Page 17: 5. administracioìn de claves y certificados

Generación de una petición para certificado

Para obtener un certificado de una Autoridad certificadora (CA), se debe generar una petición (CSR -Certificate Signing Request-).

Opciones globales:−alias alias −keypass keypass −keystore keystore −storepass storepass −storetype storetype −v

Page 18: 5. administracioìn de claves y certificados

Generación de una petición para certificado

Opciones específicas:−sigalg signatureAlgorithm: Algoritmo usado para firmar la petición.

−file outputFile: Fichero donde se va a almacenar la petición generada.

Page 19: 5. administracioìn de claves y certificados

Borrado de una entrada

Opción -delete:Si utiliza la opción -alias, borra la entrada asociada a dicho alias tras insertar la clave del almacen. Si no indicas el alias te lo pide.

Page 20: 5. administracioìn de claves y certificados

Exploración de un almacen

Opción -list:Te permite explorar el almacén o alguna de sus entrada.

Page 21: 5. administracioìn de claves y certificados

Exploración de un almacen

Opción -list:Uso de la opción -v: aparecerá el contenido del certificado.

Uso de la opción -rfc: el certificado aparecerá en formato RFC 1421.

No se pueden mezclar ambas opciones.

>keytool -list -keystore almacen -v

>keytool -list -keystore almacen -rfc

Page 22: 5. administracioìn de claves y certificados

Exportación de una entrada

Opción -export:

Nota: Se utiliza la opción -alias para indicar qué entrada quiere

exportarse y -file para indicar dónde almacenar la exportación.

Si quieremos guardar en formato imprimible usaremos la opción: -rfc

>keytool -export -alias clave1 -keystore almacen -file cert1

Page 23: 5. administracioìn de claves y certificados

Importación de un certificado

Opción -import:Se puede incluir en nuestro almacén de claves un certificado que ha sido creado previamente.

Opciones particulares: −file inputFile.−noprompt.−trustcacerts.

Page 24: 5. administracioìn de claves y certificados

Importación de un certificado

Page 25: 5. administracioìn de claves y certificados

Infraestructura de clases

Las clases e interfaces necesarios para manejar almacenes de claves, certificados, listas de revocación, etc, se encuentran en los paquetes:

java.security: En este paquete se encuentran todas las clases e

interfaces que nos permiten tratar con almacenes de claves y sus entradas.

java.security.cert: En este paquete se encuentran todas las clases e

interfaces que permiten manejar certificados, listas de revocación, etc.

Page 26: 5. administracioìn de claves y certificados

Clase KeyStore

La clase java.security.KeyStore encapsula la noción del almacén de claves.

Es una clase abstracta que ejecutan implementaciones específicas del proveedor.

El tipo de almacén de claves que soporta JDK 1.2 es JKS para el almacén de claves de Java.

El tipo PKCS12 también se define pero no se implementa.

Page 27: 5. administracioìn de claves y certificados

Clase KeyStore

Los métodos de administración de KeyStore son los siguientes:

getInstance(String type).getInstance(String type, String provider).getDefaultType().getType().getProvider().store(...).size() ...

http://java.sun.com/j2se/1.4.2/docs/api/

Page 28: 5. administracioìn de claves y certificados

Clase KeyStore

Page 29: 5. administracioìn de claves y certificados

Clase KeyStore

Existen dos formas de pedir un almacén de claves: especificando el tipo de keystore, o el tipo y el proveedor:

KeyStore ks = KeyStore.getInstance("JKS"); El sistema determina si hay una implementación

disponible de ese keystore en el entorno, si hay más de una selecciona en función de un criterio.

KeyStore ks = KeyStore.getInstance("JKS", "SUN"); El sistema determina si hay una implementación

disponible de ese keystore en el paquete solicitado y si no lo hay lanza una excepción.

Antes de poder utilizarlo se deberá utilizar el método load().

Page 30: 5. administracioìn de claves y certificados

Clase KeyStore

¿Cuál es el proveedor que estoy utilizando?

Page 31: 5. administracioìn de claves y certificados

Clase KeyStore

¿Tipo de KeyStore?

Page 32: 5. administracioìn de claves y certificados

Clase KeyStore

El manejo de un almacen de claves de forma programática se realiza de la siguiente manera:

Obtención del almacen: este proceso es algo más complejo.Gestión del almacen.

Page 33: 5. administracioìn de claves y certificados

Clase KeyStore

Obtención del almacen:Paso 1: Obtener la instancia del almacen: Método getInstance().

Paso 2: Obtener el flujo de entrada asociado al fichero que representa al almacen y contraseña de acceso.Paso 3: Asociar el almacen al objeto anteriormente creado: Método load().

Page 34: 5. administracioìn de claves y certificados

Clase KeyStore

Gestión del almacen:Una vez creada adecuadamente la instancia de KeyStore, su gestión consiste en el manejo de sus métodos asociados: aliases(): devuelve el nombre de todos los alias de las

entradas en el almacen. deleteEntry(): borra una entrada. getCertificate(): se obtiene un certificado a partir de su

alias. getCertificateChain(): devuelve una cadena de

certificados. getEntry(): devuelve una entrada.

Page 35: 5. administracioìn de claves y certificados

Clase KeyStore

Gestión del almacen: setEntry(): guarda una entrada en el almacen de claves. setCertificateEntry: guarda un certificado en el almacen

de claves. ...

Una vez que se ha terminado de operar sobre un almacen se debe utilizar el método store() para actualizar los cambios.

Page 36: 5. administracioìn de claves y certificados

Clase KeyStore

Las entradas del almacén de claves:KeyStore.PrivateKeyEntry: entrada asociada a clave privada.KeyStore.SecretKeyEntry: entrada asociada a clave secreta.KeyStore.TrustedCertificateEntry: entrada asociada a certificado de confianza.

Page 37: 5. administracioìn de claves y certificados

JarSigner

Herramienta que genera firmas para ficheros jar y verifica la firma de ficheros jar que ya han sido firmados.

Sintaxis:jarsigner [ opciones ] jar-file aliasjarsigner -verify [ opciones ] jar-file

Page 38: 5. administracioìn de claves y certificados

JarSigner

Opciones:-keystore url.-storetype storetype.-keypass password.-sigfile file.-signedjar file. ...

Page 39: 5. administracioìn de claves y certificados

JarSigner

Ejemplos:jarsigner -keystore /working/mystore -storepass myspass -keypass j638klm -signedjar sbundle.jar bundle.jar janejarsigner -verify sbundle.jar.

Cuando un fichero jar es firmado el contenido del fichero es el mismo, excepto en que aparecen dos nuevos ficheros en un directorio META-INF:

Fichero con extensión .SF .Fichero con extensión .DSA .

Page 40: 5. administracioìn de claves y certificados

JarSigner

Page 41: 5. administracioìn de claves y certificados

APIs para la gestión

Keytool: línea de comandos. Gestión de claves programáticamente. Java proporciona APIs para leer y escribir

almacenes de claves y sus entradas. Las clases e interfaces más significativas son:

interface Principal.clase KeyStore.

Page 42: 5. administracioìn de claves y certificados

TrustStore

JSSE introduce el concepto de Truststore como una base de datos que almacena certificados. Este concepto tiene una serie de elementos en común con un keystore:

Tiene el mismo formato que un Keystore.Son administrados mediante la herramienta keytool.Ambos son representados, programáticamente hablando, mediante instancias de la clase KeyStore.

La diferencia entre un keystore y un truststore es el tipo de servicio que ofrece.