Tipo de almacén de claves: ¿cuál usar?

Al mirar el archivo java.security de mi JRE , veo que el tipo de almacén de claves a usar por defecto está establecido en JKS . Aquí , hay una lista de los tipos de almacén de claves que se pueden usar.

¿Hay un tipo de almacén de claves recomendado? ¿Cuáles son los pros / contras de los diferentes tipos de almacén de claves?

Hay algunos tipos más que los enumerados en la lista de nombres estándar a la que se ha vinculado. Puede encontrar más en la documentación de proveedores de cifrado . Los más comunes son sin duda JKS (por defecto) y PKCS12 (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 Java. PKCS # 12 no es específico de Java, es particularmente conveniente usar certificados (con claves privadas) respaldados desde un navegador o provenientes de herramientas basadas en OpenSSL ( keytool no pudo convertir un keystore e importar sus claves privadas antes de Java 6, entonces tenías que usar otras herramientas).

Si ya tiene un archivo PKCS # 12, a menudo es más fácil usar el tipo PKCS12 directamente. Es posible convertir formatos, pero rara vez es necesario si puede elegir directamente el tipo de almacén de claves.

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 podía 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 las tiendas de confianza, donde almacena la lista de certificados en los que confía (pero no tiene la clave privada para ellos).

Esto ha cambiado en Java 8, por lo que ahora también puede tener entradas de solo certificado en las tiendas PKCS12 . (Puede encontrar más detalles sobre estos cambios y otros planes en JEP 229: Crear almacenes de claves PKCS12 por defecto ).

Hay algunos otros tipos de almacén de claves, quizás menos utilizados (dependiendo del contexto), que incluyen:

  • PKCS11 , para bibliotecas PKCS # 11, normalmente para acceder a tokens criptográficos de hardware, pero la implementación del proveedor de Sun también admite almacenes NSS (de Mozilla) a través de esto.
  • BKS , usando el proveedor BouncyCastle (comúnmente usado 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.

Aquí hay una publicación que presenta diferentes tipos de keystore en Java y las diferencias entre los diferentes tipos de keystore. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java—-Overview

A continuación se muestran las descripciones de diferentes almacenes de claves de la publicación:

JKS, Java Key Store. Puede encontrar este archivo en sun.security.provider.JavaKeyStore. Este almacén de claves es específico de Java, por lo general tiene una extensión de jks. Este tipo de almacén de claves puede contener claves privadas y certificados, pero no se puede usar para almacenar claves secretas. Dado que es un almacén de claves específico de Java, no se puede usar en otros lenguajes de progtwigción.

JCEKS, tienda clave JCE. Puede encontrar este archivo en com.sun.crypto.provider.JceKeyStore. Este almacén de claves tiene una extensión de jceks. Las entradas que se pueden colocar en el almacén de claves JCEKS son claves privadas, claves secretas y certificados.

PKCS12, este es un tipo de almacén de claves estándar que se puede usar en Java y otros idiomas. Puede encontrar esta implementación de almacén de claves en sun.security.pkcs12.PKCS12KeyStore. Por lo general, tiene una extensión de p12 o pfx. Puede almacenar claves privadas, claves secretas y certificados en este tipo.

PKCS11, este es un tipo de almacén de claves de hardware. Sirve una interfaz para que la biblioteca Java se conecte con dispositivos de almacenamiento de claves de hardware como Luna, nCipher. Puede encontrar esta implementación en sun.security.pkcs11.P11KeyStore. Cuando carga el almacén de claves, no necesita crear un proveedor específico con configuración específica. Este almacén de claves puede almacenar claves privadas, claves secretas y claves. Al cargar el almacén de claves, las entradas se recuperarán del almacén de claves y luego se convertirán en entradas de software.