Keystore JKS: Crear contendores de certificados / claves JKS con soporte SHA512

Loc contenedores (keystores) son ficheros que hacen la función de repositorio de certificados, los cuales pueden contener certificados, claves, certificados con claves y otro tipo de datos / ficheros / objetos, todo depende del formato del contenedor utilizado.

Tipos de contenedores más populares.

Uno muy común al usar openssl es “pkcs12”, el cual se define como un formato de archivo de almacenamiento para objetos criptográficos. Se utiliza comúnmente para agrupar una clave privada con su certificado X.509 o para agrupar todos los miembros de una cadena de confianza.

Cada keystore tiene sus limitaciones, por ejemplo pkcs12 solo soporta los siguientes tipos de algoritmos criptográficos a la hora de cifrar una clave.

De querer utilizar el algoritmo SHA512 para firmar un documento, este contenedor no sería una opción viable. Si por ejemplo se utiliza JSignPdf para firmar documentos PDF y utilizamos un keystore del tipo pkcs12, nunca se podrá usar un algoritmo de firma superior a SHA1 por mucho que se le indique a JSignPdf que firme utilizando SHA512.

Vamos a ver a continuación qué herramienta nos puede facilitar la creación de contenedores y como crear desde la linea de comandos un contenedor JKS (soportado por JSignPdf) y almacenar dentro una clave privada y certificado. (JKS soporta SHA512 y anteriores).

KeyStore-explorer (Windows , MAC y Linux): http://keystore-explorer.sourceforge.net/specifications.php

KeyStore-explorer (Java) facilita de forma gráfica la creación de varios tipos de contenedores y además permite consultar estado de certificados de diferentes tipos, no requiere más que java como dependencia. También tiene opciones interesantes como importar partes de los certificados, cambiar la clave del contenedor o averiguar de qué tipo es, una herramienta muy recomendada para lidiar con este tipo de ficheros.

Crear un keystore JKS desde la linea de comandos para contener una clave privada + certificado.

Descargar (binario y código fuente): ImportKey.

La clave privada y el certificado deben estar en formato DER y no PEM.

openssl pkcs8 -topk8 -nocrypt -in key.pem -inform PEM -out key.der -outform DER
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

Generar en el home del usuario un fichero llamado “keystore.ImportKey”, el alias para dicha entrada en el keystore será en este caso “CA_amazon”. (Alias si no se especifica y password: importkey)

java ImportKey cakey.der cacert.der CA_amazon

NOTA: Para cambiar la clave se recomienda el uso de keytool o bien KeyStore-explorer.

Enlace de interés: http://www.agentbob.info/agentbob/79-AB.html