5. administracioìn de claves y certificados

Post on 22-Apr-2015

4.548 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Criptografía en aplicaciones Java

Administración de claves y certificados

Índice de contenidos

Introducción. Herramienta keytool. Infraestructura de clases.

Clase KeyStore.APIs para la gestión.

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.

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.

Introducción

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.

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.

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.

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.

Herramienta keytool

Trabaja en línea de comandos:

Herramienta keytool

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

>keytool -opcion1 valor1 -opcion2 valor2 ...

Herramienta keytool

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

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.

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.

Creación de una entrada para clave

Almacén por defecto:

Creación de una entrada para clave

Una nueva clave sobre un nuevo almacén:

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

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.

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.

Exploración de un almacen

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

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

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

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.

Importación de un certificado

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.

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.

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/

Clase KeyStore

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().

Clase KeyStore

¿Cuál es el proveedor que estoy utilizando?

Clase KeyStore

¿Tipo de KeyStore?

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.

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().

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.

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.

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.

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

JarSigner

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

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 .

JarSigner

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.

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.

top related