Al mirar el archivo java.security
de mi JRE
, veo que el tipo de almacén de claves que se utilizará de forma predeterminada está configurado en JKS
. Aquí , hay una lista de los tipos de almacén de claves que se pueden utilizar.
¿Existe un tipo de almacén de claves recomendado? ¿Cuáles son las ventajas y desventajas de los diferentes tipos de almacenes de claves?
Respuestas:
Hay algunos tipos más de los que figuran en la lista de nombres estándar a la que ha vinculado. Puede encontrar más en la documentación de proveedores de cifrado . Los más comunes son ciertamente
JKS
(los predeterminados) yPKCS12
(para archivos PKCS # 12, a menudo con extensión.p12
o, a veces.pfx
).JKS es el más común si te quedas dentro del mundo de Java. PKCS # 12 no es específico de Java, es particularmente conveniente usar certificados (con claves privadas) respaldados desde un navegador o que provienen de herramientas basadas en OpenSSL (
keytool
no se pudo convertir un almacén de claves e importar sus claves privadas antes de Java 6 , por lo que tuvo que usar otras herramientas).Si ya tiene un archivo PKCS # 12, a menudo es más fácil usar el
PKCS12
tipo directamente. Es posible convertir formatos, pero rara vez es necesario si puede elegir el tipo de almacén de claves directamente.En Java 7,
PKCS12
era principalmente útil como almacén de claves, pero menos para un almacén de confianza (vea la diferencia entre un almacén de claves y un almacén de confianza ), porque no se pueden almacenar entradas de certificado sin una clave privada. Por el contrario,JKS
no requiere que cada entrada sea una entrada de clave privada, por lo que puede tener entradas que contengan solo certificados, lo cual es útil para almacenes de confianza, donde almacena la lista de certificados en los que confía (pero no tiene el clave privada para ellos).Esto ha cambiado en Java 8, por lo que ahora también puede tener entradas de solo certificado en las
PKCS12
tiendas. (Se pueden encontrar más detalles sobre estos cambios y otros planes en JEP 229: Crear almacenes de claves PKCS12 de forma predeterminada ).Hay algunos otros tipos de almacenes de claves, quizás de uso menos frecuente (según el contexto), entre los que se incluyen:
PKCS11
, para bibliotecas PKCS # 11, generalmente para acceder a tokens criptográficos de hardware, pero la implementación del proveedor Sun también admite tiendas NSS (de Mozilla) a través de esto.BKS
, utilizando el proveedor BouncyCastle (comúnmente utilizado para Android).Windows-MY
/Windows-ROOT
, si desea acceder directamente al almacén de certificados de Windows.KeychainStore
, si desea utilizar el llavero OSX directamente.fuente
KeyStore
implementación a tal efecto). Sin embargo, puede cargarlos sobre la marcha en una instancia de almacén de claves (generalmente JKS, el tipo predeterminado) en la memoria usando unCertificateFactory
(como se muestra en esta respuesta ).JKS
ha cambiado aJCEKS
Aquí hay una publicación que presenta diferentes tipos de almacén de claves en Java y las diferencias entre los diferentes tipos de almacén de claves. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----
A continuación se muestran las descripciones de los diferentes almacenes de claves de la publicación:
fuente
Si está utilizando Java 8 o más reciente, definitivamente debería elegir
PKCS12
, el predeterminado desde Java 9 ( JEP 229 ).Las ventajas en comparación con
JKS
yJCEKS
son:PKCS12
es un formato estándar, puede ser leído por otros programas y bibliotecas 1JKS
yJCEKS
son bastante inseguros. Esto se puede ver por la cantidad de herramientas para forzar contraseñas de estos tipos de almacén de claves, especialmente populares entre los desarrolladores de Android. 2, 31 Hay JDK-8202837 , que se ha corregido en Java 11
2 El recuento de iteraciones para PBE utilizado por todos los tipos de almacén de claves (incluido PKCS12) solía ser bastante semanal ( CVE-2017-10356 ), sin embargo, esto se ha corregido en 9.0.1, 8u151, 7u161 y 6u171
3 Para leer más:
fuente