Un KeyStore, como su nombre indica, es básicamente un repositorio de certificados, claves públicas y privadas. Además, las distribuciones JDK se envían con un ejecutable para ayudar a administrarlas, la herramienta de claves (keytool).

Por otro lado, los certificados pueden tener muchas extensiones, pero debemos tener en cuenta que un archivo .cer contiene claves públicas X.509 y, por lo tanto, solo se puede usar para la verificación de identidad.

En este breve artículo, veremos cómo importar un archivo .cer a un Java KeyStore.

Importar un certificado

Sin más preámbulos, ahora importemos el archivo de certificado público de dentro de un KeyStore de muestra.

La keytool tiene muchas opciones, pero la que nos interesa es importcert, que es tan sencilla como su nombre. Dado que generalmente hay diferentes entradas dentro de un KeyStore, tendremos que usar el argumento de alias para asignarle un nombre único:

keytool -importcert -alias public_cert -file certificado.cer -keystore keystore_local
....
Enter keystore password: ... 
Trust this certificate? [no]:  y 
Certificate was added to keystore

Aunque el comando solicita una contraseña y una confirmación, podemos omitirlos agregando los argumentos storepass y noprompt. Esto es especialmente útil cuando se ejecuta keytool desde un script:

keytool -importcert -alias public_cert -file certificado.cer -keystore keystore_local -storepass pass123 -noprompt 
> Certificate was added to keystore

Además, si el KeyStore no existe, se generará automáticamente. En este caso, podemos establecer el formato mediante el argumento storetype. Si no se especifica, el formato KeyStore predeterminado es JKS si usamos Java 8 o anterior. Desde Java 9 en adelante, el valor predeterminado es PKCS12:

keytool -importcert -alias public_cert -file certificado.cer -keystore keystore_local -storetype PKCS12
 Enter keystore password:
 Re-enter new password:
 …
 Trust this certificate? [no]: y
 Certificate was added to keystore

Aquí hemos creado un almacén de claves PKCS12. La principal diferencia entre JKS y PKCS12 es que JKS es un formato específico de Java, mientras que PKCS12 es una forma estandarizada de almacenar claves y certificados.

Categorized in:

Tagged in:

,