Trabajar con certificados en Java keystore

El siguiente texto está destinado a usuarios que utilizan Apache Tomcat para firmar las aplicaciones (applets) en Java y en general trabajan con el almacén de claves de Java.

Aviso: Crear la CSR para Code Signing es lo mismo que crearla para el certificado de servidor. Common name es el nombre de su empresa.

Crear un almcén de claves (keystore) y un par de claves

Este comando crea un nuevo almacén de claves y un par de claves que utilizará para crear un pedido de un certificado. keytool -genkey -alias test -keyalg RSA -keystore test.jks -keysize 2048 Luego se le pedirá que introduzca la contraseňa para el almacén de claves y la información especificativa. Los datos introducidos van a corresponder a aquellos que están en la CSR:

What is your first and last name?
[Unknown]: Test Test
What is the name of your organizational unit?
[Unknown]: Unit
What is the name of your organization?
[Unknown]: Test corp.
What is the name of your City or Locality?
[Unknown]: Some City
What is the name of your State or Province?
[Unknown]: Some State
What is the two-letter country code for this unit?
[Unknown]: US
Is CN=Test Test, OU=Unit, O=Test corp., L=Some City, ST=Some State, C=US correct?
[no]: yes

Crear la CSR

La CSR le creamos mediante el siguiente comando:
keytool -certreq -alias test -keystore test.jks -file test.csr Ha introducido los datos sobre el demandante al crear el par de claves en el paso anterior, por eso la herramienta de claves ya no los pide.

El parámetro -file test.csr sirve para enviar ls CSR a un archivo. Si lo omite la CSR aparecerá en el terminal y puede copiarla directamente a nuestro pedido. Luego solo espere hasta que se emita el certificado.

La importación del certificado emitido al almacén de claves

Recibirá el certificado emitido de SSLmarket por correo electrónico y necesita enviarlo al almacén de claves.

Durante la importación el almacén de claves requiere que el certificado sea fiable y que la autoridad certificadora esté presente en el almacén. Esto significa que los certificados se importan en "orden inverso": desde la raíz al servidor.

Para la importación usa el comando:
keytool -import -trustcacerts -alias test -file test.txt -keystore test.jks

Error: Failed to establish chain from reply

El requisito mencionado para importar el certificado CA al almacén de claves causa un error frecuente keytool error: java.lang. Exception: Failed to establish chain from reply. Este error significa que falta el certificado CA/intermediate.

Opciones de solucionar el problema:

  • 1) importar en orden inverso - primero los certificados CA: keytool -import -trustcacerts -alias root -file intermediate.crt -keystore test.jks
  • 2) importar el certificado en formato PKCS#7 (P7B). Convierte el archivo linux_cert+ca.pem que ha recibido de SSLmarket a P7B usando este comando: openssl crl2pkcs7 -nocrl -certfile linux_cert+ca.pem -out linux_cert+ca.p7b y luego importe este archivo al almacén de claves:
    keytool -import -trustcacerts -alias test -file linux_cert+ca.p7b -keystore test.jks El resultado Certificate reply was installed in keystore es una importación exitosa, al contrario, el error Public keys in reply and keystore don't match significa que en el archivo P7B no está el certificado para este dominio (de servidor, endpoint), sino solo el intermediate.

  • 3) eventualmente, importar un certificado en formato PKCS # 12 (PFX) en el que está todo junto: keytool -importkeystore -srckeystore pkcs12file.p12 -srcstoretype pkcs12 -destkeystore test.jks -deststoretype JKS La importación mediante PKCS#12 es la más rápida pero si ha generado la CSR directamente en el almacén de claves, es inútil (requiere su exportación).

Herramientas con GUI

Si no quiere trabajar con el almacén de claves utilizando una línea de comandos o un terminal puede usar una de las pocas herramientas de interfaz gráfica.

Ambos programas pueden crear o abrir un archivo de almacén de claves, crear la CSR o importar el certificado emitido de nuevo (respuesta de la autoridad certificadora). El proceso es igual aquel para el terminal arriba mencionado; lo que difiere es el entorno gráfico en el que pueda hacerlo.

Portecle

Portecle es un programa gratuito en Java que permite administrar el almacén de claves en el entorno gráfico. Puede ejecutarlo en plataformas diferentes (Linux, MacOS, Windows).

KeyStore Explorer

KeyStore Explorer fonciona de modo parecido como el programa precedente y él también es de multiplataforma.

Sin embargo, la lógica de ambos programas mencionados se parace al almacén de claves original: así al final no necesariamente ahorrará el trabajo.

¿Le resultó útil este artículo?