38 votes

Quelle est la différence entre un keystore PKCS12 et un keystore PKCS11 ?

Je suis intéressé par les bibliothèques Java-NSS, et je lis le document Guide P11 de Sun . Je suis confus quant à ce qui suit :

Quelle est la différence entre l'utilisation d'un keystore PKCS12 et d'un keystore PKCS11 ?

Un keystore est juste un keystore, non ? Y a-t-il des différences ? Peuvent-ils être utilisés de manière interchangeable à tous égards ?

54voto

Bruno Points 47560

PKCS#12 est un format de fichier (souvent appelé .p12 ou .pfx) dans lequel vous pouvez stocker une clé privée et des certificats. Il est utilisé pour convertir/transférer des clés et des certificats, principalement. Si vous exportez une clé privée + un certificat à partir de votre navigateur, il est probable que ce sera dans ce format.

PKCS#11 est une interface, généralement utilisée pour parler aux jetons cryptographiques matériels (souvent des cartes à puce ou des jetons USB, qui sont effectivement des cartes à puce intégrées dans un lecteur). Cette interface comporte un certain nombre d'opérations permettant d'utiliser les clés et les certificats. Certains jetons sont capables de signer en utilisant la clé privée qu'ils contiennent, sans que la clé puisse quitter le dispositif. L'intérêt de cette interface est de traiter ce qui gère les clés et les certificats comme une entité séparée, sans avoir à effectuer les opérations cryptographiques qu'offre le PKCS#11 (plus précisément, celles liées à la clé privée).

Lorsque vous utilisez PKCS#11 avec NSS, vous utilisez effectivement NSS comme une boîte noire enveloppée derrière la couche PKCS#11 (c'est effectivement un fournisseur logiciel pour ce que serait un jeton matériel PKCS#11). Il y a une légère différence dans la façon dont Java utilise NSS via PKCS#11 dans la mesure où il ne nécessite pas de bibliothèque partagée PKCS#11 (par rapport aux autres bibliothèques PKCS#11), donc en tant que tel, ce n'est pas PKCS#11 à proprement parler, bien que ce soit très similaire.

En Java, il est possible d'obtenir un fichier RSAPrivateKey à partir d'un magasin PKCS#11, l'utiliser pour signer et déchiffrer, sans jamais pouvoir obtenir quoi que ce soit de son module. Le fournisseur de sécurité qui la gère effectuera la signature et le déchiffrement via la bibliothèque (et donc via le jeton, si cette bibliothèque est prise en charge par un jeton matériel).

Pour en revenir à la KeyStore En Java, il s'agit d'une API qui peut vous permettre de charger et d'utiliser des clés et des certificats à partir de fichiers (vous obtenez divers formats de fichiers tels que JKS, PKCS#12, PEM, en fonction de votre fournisseur de sécurité) ou à partir d'autres API sous-jacentes (telles que PKCS#11, plus ou moins fusionnée avec NSS dans le fournisseur Sun, ou le KeychainStore si vous êtes sous OSX et que vous voulez utiliser la KeyChain comme KeyStore).

4voto

PixelsTech Points 152

Desde Différents types de keystore en Java -- Aperçu les différences entre le PKCS12 et le PKCS11 peuvent être décrites comme suit

PKCS12 Il s'agit d'un type de keystore standard qui peut être utilisé en Java et dans les applications de l'UE. d'autres langages. Vous pouvez trouver cette implémentation de keystore à sun.security.pkcs12.PKCS12KeyStore. Il porte généralement l'extension p12 ou pfx. Vous pouvez stocker des clés privées, des clés secrètes et des certificats sur ce type. Contrairement à JKS, les clés privées sur le keystore PKCS12 peuvent être extraites en Java. Ce type est portable et peut être utilisé avec d'autres bibliothèques écrites dans d'autres langages tels que C, C++ ou C#.

Actuellement, le type de keystore par défaut en Java est JKS. keystore sera JKS si vous ne spécifiez pas l'option -storetype lors de la création de keystore avec keytool. Cependant, le type de keystore par défaut sera sera changé en PKCS12 dans Java 9 en raison de sa meilleure compatibilité par rapport à JKS. Vous pouvez vérifier le type de keystore par défaut à l'adresse fichier $JRE/lib/security/java.security :

PKCS11 il s'agit d'un type de keystore matériel. Il fournit une interface pour la bibliothèque Java pour se connecter à des dispositifs de stockage de clés matérielles tels que Luna de SafeNet, nCipher ou les cartes à puce. Vous pouvez trouver cette implémentation à sun.security.pkcs11.P11KeyStore. Lorsque vous chargez le keystore, vous n'avez pas besoin de créer un fournisseur spécifique avec une configuration spécifique. spécifique. Ce keystore peut stocker des clés privées, des clés secrètes et des certificats. certificats. Lors du chargement du keystore, les entrées seront récupérées du keystore et ensuite converties en entrées logicielles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X