Trabajo con los certificados en Java keystore

El siguiente texto está destinado a los usuarios que utilizan el servidor Apache Tomcat, que firma aplicaciones (applets) en Java y en general, un trabajo con un keystore de java.

Aviso: Generar CSR para Code Signing es lo mismo que generarla para un certificado de servidor. Common name es el nombre de su organización.

Creación de keystore y de un par de claves

Esta orden generará un nuevo keystore y un par de claves que utilizará para generar la solicitud del certificado. keytool -genkey -alias test -keyalg RSA -keystore test.jks -keysize 2048 A continuación se le pedirá que indique una contraseña para keystore y sus datos más concretos. Los datos indicados corresponderán a los que están en 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

Creación de CSR

Generaremos la CSR mediante la siguiente orden:
keytool -certreq -alias test -keystore test.jks -file test.csr Usted haya indicado los datos del solicitante al generar el par de claves en el paso anterior, con lo cual, keytool ya no preguntará por ellos.

El parámetro -file test.csr sirve para inserción de CSR en el archivo. Si lo omite CSR aparecerá en la terminal y usted la podrá copiar directamente a nuestro pedido. Después solamente esperará la emisión del certificado.

Importación del certificado emitido a keystore

Usted recibirá el certificado emitido de SSLmarket por correo electrónico y tiene que insertarlo en keystore.

Durante la importación de los certificados, keystore requiere que el certificado sea confiable y que la autoridad emisora esté presente en keystore. Esto quiere decir que los certificados se importan en "orden contrario": desde el certificado raíz hasta el de servidor.

Realice la importación mediante la siguiente orden:
keytool -import -trustcacerts -alias test -file test.txt -keystore test.jks

Error: Failed to establish chain from reply

La petición de la anterior importación de la AC a keystore causa un frecuente error keytool error: java.lang.Exception: Failed to establish chain from reply. El error significa que en keystore falta la AC emisora/ certificado Intermediate.

Usted puede resolver el problema mediante:

  • 1)Importación en orden contrario: primero los certificados AC: keytool -import -trustcacerts -alias root -file intermediate.crt -keystore test.jks
  • 2) o importación del certificado en el formato PKCS#7 (P7B). Traslade el archivo linux_cert+ca.pem, que haya recibido de SSLmarketu, a P7B mediante esta orden: openssl crl2pkcs7 -nocrl -certfile linux_cert+ca.pem -out linux_cert+ca.p7b e importe después este archivo a keystore:
    keytool -import -trustcacerts -alias test -file linux_cert+ca.p7b -keystore test.jks El resultado Certificate reply was installed in keystore significa una importación exitosa y al contrario, el error Public keys in reply and keystore don't match significa que en P7B del archivo no hay un certificado para el dominio en cuestión (de servidor, endpoint) sino solamente el Intermediate.

  • 3) eventualmente, mediante la importación del certificado en el formato PKCS#12 (PFX), en el cual 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 usted haya generado CSR directamente en keystore es innecesaria (requiere su exportación).

Herramientas con GUI

Si usted no quiere trabajar con keystore mediante la interfaz de línea de comandos o la terminal puede utilizar una de las pocas herramientas con la interfaz gráfica.

Los dos programas arriba mencionados pueden crear o abrir un archivo de keystore, generar CSR y volver a importar el certificado emitido (respuesta de AC). El procedimiento es igual que el para la terminal anterior; la diferencia consiste en la interfaz gráfica en que puede realizarlo.

Portecle

Portecle es un programa gratuito en Java, que permite gestionar keystore en la interfaz gráfica. Lo puede activar en diferentes plataformas (Linux, MacOS, Windows).

KeyStore Explorer

KeyStore Explorer funciona de modo parecido al programa anterior y también tiene multiplataformas.

La lógica de los dos programas arriba mencionados es sin embargo parecida al keystore original; así pues, no ahorrará necesariamente el trabajo.