JKS: Java keyStore

Java keyStore (JKS) es un almacen de certificados y entidades de certificacion usado por las aplicaciones Java para trabajar con SSL. Cada certificado contenido en la keyStore es identificado por un alias único.

El Java Development Kit (JDK) mantiene una trustStore (keyStore de CA), es decir, una lista de entidades de certificación reconocidas, en jre/lib/security/cacerts cuya contraseña por defecto es changeit; además proporciona la utilidad keytool para crear y manipular keyStores.

Tipos de keyStore

Al iniciar el servidor de aplicaciones Tomcat es posible pasarle la ruta de dos keyStores. La idea detrás de esta posibilidad es la de tener una keyStore para albergar claves privadas y otra keyStore, normalmente denominada como trustStore, para albergar las entidades de certificación raíz, intermedias o directamente certificados que deben ser reconocidos como válidos por las aplicaciones que corren dentro del servidor de aplicaciones Tomcat.

keyStore de claves privadas

  • -Djavax.net.ssl.keyStore="/path/file", indica la keyStore que alberga los certificados, con su respectiva clave privada, que deben ser usados para el cifrado de los datos. La ruta puede ser absoluta o relativa a JAVA_HOME.
  • -Djavax.net.ssl.keyStorePassword="password", indica la contraseña de acceso a la keyStore, este parámetro no es necesario en caso de que la keyStore use la contraseña por defecto (changeit).

keyStore de certificados (trustStore)

  • -Djavax.net.ssl.trustStore="/path/file", indica la keyStore que se usará para validar los certificados que reciban las aplicaciones que corren dentro del servidor de aplicaciones Tomcat. La ruta puede ser absoluta o relativa a JAVA_HOME.
  • -Djavax.net.ssl.trustStorePassword="password", indica la contraseña de acceso a la keyStore, este parámetro no es necesario en caso de que la keyStore use la contraseña por defecto (changeit).

keytool: Key and Certificate Management Tool

Gestionar la keyStore

Crear la keyStore

1
keytool -genkey -alias mydomain -keyalg RSA -keysize 2048 -keystore keystore.jks

Cambiar contraseña de la keyStore

1
keytool -storepasswd -keystore keystore.jks

Importar certificado

1
keytool -import -trustcacerts -alias my-company -file my-company.crt -keystore keystore.jks

Borrar certificado

1
keytool -delete -alias subdomain.my-company.crt -keystore keystore.jks

Consultar la keyStore

Listar los certificados de la keyStore

1
keytool -list -keystore keystore.jks

Es posible filtrar la consulta por el nombre de alias a través del parámetro -alias alias_name, esto resulta especialmente útil en conjunto con el parámetro -v el cual aumenta la información mostrada de cada certificado para incluir longitud del certificado, huella digital, número de serie…

Ver información de un certificado

keytool permite consultar información de los certificados, incluyendo longitud del certificado, huella digital, nombre distingido, número de serie…

1
keytool -printcert -keystore my-company.crt

Exportar un certificado

Es posible exportar un certificado almacenado en la keystore a un archivo .der (archivo binario codificado en Base64)

1
keytool -exportcert -alias my-company -file my-company.der -keystore keystore.jks

OpenSSL permite convertir los certificados de un formato a otro, en la entrada Formatos de certificados y conversiones con OpenSSL se habla sobre como hacerlo.

Ejemplos

Gestionar la keyStore

Crear la keyStore

Ejemplo desde Windows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Users\antonio.guillen
λ "c:\Program Files (x86)\Java\jre1.8.0_91\bin\keytool.exe" -genkeypair -alias JAVA_APPSERV -keyalg RSA -keysize 2048 -keystore java_appserv.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
[JAVA_APPSERV]:
What is the name of your organizational unit?
[]: MY-COMPANY IT
What is the name of your organization?
[]: MY-COMPANY
What is the name of your City or Locality?
[]: MAD
What is the name of your State or Province?
[]: MAD
What is the two-letter country code for this unit?
[ES]:
Is CN=JAVA_APPSERV, OU=MY-COMPANY IT, O=MY-COMPANY, L=MAD, ST=MAD, C=ES correct?
[no]: yes
Enter key password for <JAVA_APPSERV>
(RETURN if same as keystore password):

Importar certificado

Ejemplo desde Windows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\antonio.guillen
λ "c:\Program Files (x86)\Java\jre1.8.0_91\bin\keytool.exe" -importcert -trustcacerts -alias my-project.com -file my-project.com.crt -keystore java_appserv.jks
Enter keystore password:
Owner: EMAILADDRESS=support@my-project.com, CN=my-project.com, OU=Project Support, O=My Company, L=Madrid, ST=Madrid, C=ES
Issuer: CN=MY COMPANY CA, DC=my-company, DC=com
Serial number: 223fa7de0000000b51c3
Valid from: Mon Oct 20 16:10:30 CEST 2014 until: Wed Jan 18 11:30:05 CET 2017
Certificate fingerprints:
MD5: 10:C3:F6:AC:43:80:1E:44:7E:01:0D:C2:0C:CE:2D:C1
SHA1: 65:57:B1:31:07:F2:1C:CE:81:44:8A:46:DF:62:A7:12:E5:FB:AA:78
SHA256: 29:A8:81:02:2F:2E:BA:60:6E:F9:BE:5D:51:9F:A4:54:A1:C5:26:A2:F4:1A:56:E5:A7:AE:AF:C1:3D:16:28:2B
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
...
...
Trust this certificate? [no]: y
Certificate was added to keystore

Borrar certificado

Ejemplo desde Linux:

1
2
[root@appserv03 /]# keytool --delete --alias my-project.es.crt -keystore java_appserv.jks
Enter keystore password:

Entradas de interés

Contenidos
  1. 1. Tipos de keyStore
    1. 1.1. keyStore de claves privadas
    2. 1.2. keyStore de certificados (trustStore)
  2. 2. keytool: Key and Certificate Management Tool
    1. 2.1. Gestionar la keyStore
      1. 2.1.1. Crear la keyStore
      2. 2.1.2. Cambiar contraseña de la keyStore
      3. 2.1.3. Importar certificado
      4. 2.1.4. Borrar certificado
    2. 2.2. Consultar la keyStore
      1. 2.2.1. Listar los certificados de la keyStore
      2. 2.2.2. Ver información de un certificado
      3. 2.2.3. Exportar un certificado
  3. 3. Ejemplos
    1. 3.1. Gestionar la keyStore
      1. 3.1.1. Crear la keyStore
      2. 3.1.2. Importar certificado
      3. 3.1.3. Borrar certificado