the generate from exporting java security pkcs#11 nss pkcs12

java - from - keytool generate key file



¿Cuál es la diferencia entre un almacén de claves PKCS12 y un almacén de claves PKCS11? (2)

Estoy interesado en las bibliotecas Java-NSS, y estoy leyendo la Guía P11 de Sun. Estoy confundido sobre lo siguiente:

¿Cuál es la diferencia entre usar un almacén de claves PKCS12 y un almacén de claves PKCS11?

Un almacén de claves es solo un almacén de claves, ¿verdad? ¿Hay algunas diferencias? ¿Se pueden usar indistintamente en cualquier aspecto?


PKCS # 12 es un formato de archivo (a menudo llamado .p12 o .pfx) donde puede almacenar una clave privada y certificados. Se usa para convertir / transportar claves y certificados, principalmente. Si exporta un certificado + clave privada desde su navegador, es probable que tenga ese formato.

PKCS # 11 es una interfaz, generalmente utilizada para hablar con tokens criptográficos de hardware (a menudo, tarjetas inteligentes o tokens USB, que en realidad son tarjetas inteligentes integradas en un lector). Esta interfaz tiene una serie de operaciones para hacer uso de las claves y certificados. Algunos tokens pueden firmar usando la clave privada que contienen, sin que la tecla pueda abandonar el dispositivo. El objetivo de esta interfaz es tratar lo que maneja las claves y certificados como una entidad separada, sin tener que hacer las operaciones criptográficas que ofrece PKCS # 11 (más específicamente, las relacionadas con la clave privada).

Cuando utiliza PKCS # 11 con NSS, está utilizando efectivamente NSS como una caja negra envuelta detrás de la capa PKCS # 11 (es efectivamente un proveedor de software para lo que sería un token de hardware PKCS # 11). Hay una ligera diferencia en la forma en que Java usa NSS a través de PKCS # 11 en que no requiere una biblioteca compartida PKCS # 11 (en comparación con otras bibliotecas PKCS # 11), por lo tanto, no es PKCS # 11 estrictamente hablando, aunque es muy similar.

En Java, es posible que pueda obtener una instancia RSAPrivateKey de una tienda PKCS # 11, utilícela para firmar y descifrar, sin poder obtener nada de su módulo. El proveedor de seguridad que lo maneje hará la firma / descifrado a través de la biblioteca (y por lo tanto a través del token, si esa biblioteca es compatible con un token de hardware).

Volviendo a KeyStore en Java, es una API que puede permitirle cargar y usar claves y certificados de archivos (obtiene varios formatos de archivos como JKS, PKCS # 12, PEM, dependiendo de su proveedor de seguridad) o de otros subyacentes API (como PKCS # 11, más o menos fusionada con NSS en el proveedor de Sun, o KeychainStore si está en OSX y quiere usar KeyChain como KeyStore).


Desde Diferentes tipos de keystore en Java - Overview , las diferencias entre PKCS12 y PKCS11 se pueden describir como las siguientes

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. A diferencia de JKS, las claves privadas en el almacén de claves PKCS12 se pueden extraer en Java. Este tipo es portátil y se puede operar con otras bibliotecas escritas en otros idiomas, como C, C ++ o C #.

Actualmente, el tipo de almacén de claves predeterminado en Java es JKS, es decir, el formato del almacén de claves será JKS si no se especifica el -storetype mientras se crea el almacén de claves con keytool. Sin embargo, el tipo de almacén de claves predeterminado se cambiará a PKCS12 en Java 9 porque su compatibilidad mejorada en comparación con JKS. Puede verificar el tipo de almacén de claves predeterminado en el archivo $ JRE / lib / security / java.security:

PKCS11 , este es un tipo de almacén de claves de hardware. Proporciona una interfaz para que la biblioteca Java se conecte con los dispositivos de almacenamiento de claves de hardware, como Luna, nCipher o tarjetas inteligentes de SafeNet. 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 certificados. 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.