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