Quelle est la différence entre un clavier PKCS12 et un clavier PKCS11?
Je m'intéresse aux bibliothèques Java-NSS, et je lis le Sun's P11 Guide . Je suis confus sur ce qui suit:
Quelle est la différence entre utiliser un clavier PKCS12 et un clavier PKCS11?
un keystore est juste un keystore, Non? Y at-il des différences? Peuvent-ils être utilisés de façon interchangeable dans n'importe quel aspect?
2 réponses
PKCS#12 est un format de fichier (souvent appelé .p12 ou .pfx) où vous pouvez stocker une clé privée et de certificats. Il est utilisé pour convertir/transporter des clés et des certificats, principalement. Si vous exportez une clé privée + certificat à partir de votre navigateur, il va probablement être dans ce format.
PKCS#11 est une interface, habituellement utilisée pour parler à des jetons cryptographiques matériels (souvent des cartes à puce ou des clés USB, qui sont effectivement des cartes à puce intégrées dans un lecteur). Ce l'interface dispose d'un certain nombre d'opérations à faire usage des clés et des certificats. Certains jetons peuvent signer en utilisant la clé privée qu'ils contiennent, sans que la clé puisse quitter l'appareil. Le but de cette interface est de traiter ce qui gère les clés et les certificats comme une entité distincte, sans avoir à effectuer les opérations cryptographiques que les PKCS#11 offrent (plus précisément, celles liées à la clé privée).
lorsque vous utilisez PKCS#11 avec NSS, vous êtes effectivement utiliser NSS comme une boîte noire enveloppée derrière la couche PKCS#11 (c'est en fait un fournisseur de logiciel pour ce qu'un jeton PKCS#11 serait). Il y a une légère différence dans la façon dont Java utilise NSS via PKCS#11 en ce sens qu'il n'a pas besoin d'une bibliothèque partagée PKCS#11 (par rapport à d'autres bibliothèques PKCS#11), donc ce n'est pas PKCS#11 à proprement parler, bien que ce soit très similaire.
en Java, vous pouvez être en mesure d'obtenir une instance RSAPrivateKey
à partir D'un magasin PKCS#11, utilisez-le pour signer et déchiffrer, sans jamais être capable d'obtenir quoi que ce soit de son module. Le fournisseur de sécurité qui s'en occupe signera/déchiffrera via la bibliothèque (et donc via le token, si cette bibliothèque est supportée par un token matériel).
pour revenir au KeyStore
en Java, c'est une API qui vous permet de charger et d'utiliser des clés et des certificats à partir de fichiers (vous obtenez différents formats de fichiers tels que JKS, PKCS#12, PEM, selon votre fournisseur de sécurité) ou d'autres sous-jacents APIs (comme PKCS#11, plus ou moins fusionné avec NSS dans le fournisseur Sun, ou le KeychainStore si vous êtes sur OSX et que vous voulez utiliser le KeyChain comme un KeyStore).
à Partir de les Différents types de fichier de clés en Java -- vue d'ensemble , les différences entre PKCS12 et PKCS11 peut être décrit comme suit
PKCS12 , c'est un type de keystore standard qui peut être utilisé en Java et d'autres langues. Vous pouvez trouver cette implémentation de keystore à soleil.sécurité.pkcs12.PKCS12KeyStore. Il a généralement une extension de p12 ou pfx. Vous pouvez stocker les clés privées, des clés secrètes et les certificats sur ce type. Contrairement à JKS, les clés privées sur PKCS12 keystore peuvent être extrait en Java. Ce type est portable et peut être utilisé avec autres bibliothèques écrites dans D'autres langues telles que C, C++ ou C#.
actuellement le type de keystore par défaut en Java est JKS, I. e la clé de voûte le format sera JKS si vous ne spécifiez pas le-storetype lors de la création keystore avec keytool. Cependant, le type de keystore par défaut sera changé en PKCS12 en Java 9 car sa meilleure compatibilité par rapport à notre établissement. Vous pouvez vérifier le type de keystore par défaut à $JRE/lib/security / java.dossier de sécurité:
PKCS11 , c'est un type de keystore matériel. Il fournit une interface pour la bibliothèque Java pour se connecter avec des périphériques de keystore tels que Luna, nCipher ou Cartes À Puce de SafeNet. Vous pouvez trouver ceci la mise en œuvre au soleil.sécurité.pkcs11.P11KeyStore. Lorsque vous chargez le keystore, vous n'avez pas besoin de créer un fournisseur spécifique spécifique configuration. Cette clé peut stocker des clés privées, des clés secrètes et certificat. Lors du chargement du keystore, les entrées seront récupérées de la base de données, puis converti en entrées logicielles.