En regardant le fichier java.security
de my JRE
, je vois que le type de keystore à utiliser par défaut est défini sur JKS
. Ici , il y a une liste des types de keystore qui peuvent être utilisés.
Existe-t-il un type de fichier de clés recommandé? Quels sont les avantages / inconvénients des différents types de keystore?
Réponses:
Il existe quelques types de plus que ce qui est répertorié dans la liste de noms standard à laquelle vous êtes lié. Vous pouvez en savoir plus dans la documentation des fournisseurs de cryptographie . Les plus courants sont certainement
JKS
(la valeur par défaut) etPKCS12
(pour les fichiers PKCS # 12, souvent avec une extension.p12
ou parfois.pfx
).JKS est le plus courant si vous restez dans le monde Java. PKCS # 12 n'est pas spécifique à Java, il est particulièrement pratique d'utiliser des certificats (avec des clés privées) sauvegardés à partir d'un navigateur ou provenant d'outils basés sur OpenSSL (
keytool
impossible de convertir un keystore et d'importer ses clés privées avant Java 6 , vous avez donc dû utiliser d'autres outils).Si vous avez déjà un fichier PKCS # 12, il est souvent plus facile d'utiliser
PKCS12
directement le type. Il est possible de convertir des formats, mais c'est rarement nécessaire si vous pouvez choisir directement le type de fichier de clés.Dans Java 7,
PKCS12
était principalement utile en tant que keystore mais moins pour un truststore (voir la différence entre un keystore et un truststore ), car vous ne pouviez pas stocker les entrées de certificat sans clé privée. En revanche,JKS
ne nécessite pas que chaque entrée soit une entrée de clé privée, vous pouvez donc avoir des entrées qui contiennent uniquement des certificats, ce qui est utile pour les magasins de confiance, où vous stockez la liste des certificats auxquels vous faites confiance (mais vous n'avez pas le clé privée pour eux).Cela a changé dans Java 8, vous pouvez donc désormais avoir des entrées de certificat uniquement dans les
PKCS12
magasins. (Vous trouverez plus de détails sur ces modifications et d'autres plans dans JEP 229: Créer des keystores PKCS12 par défaut .)Il existe quelques autres types de keystore, peut-être moins fréquemment utilisés (selon le contexte), notamment:
PKCS11
, pour les bibliothèques PKCS # 11, généralement pour accéder aux jetons cryptographiques matériels, mais l'implémentation du fournisseur Sun prend également en charge les magasins NSS (de Mozilla) à travers cela.BKS
, en utilisant le fournisseur BouncyCastle (couramment utilisé pour Android).Windows-MY
/Windows-ROOT
, si vous souhaitez accéder directement au magasin de certificats Windows.KeychainStore
, si vous souhaitez utiliser directement le trousseau OSX.la source
KeyStore
implémentation à cet effet). Vous pouvez cependant les charger à la volée dans une instance de keystore (généralement JKS, le type par défaut) en mémoire à l'aide deCertificateFactory
(comme indiqué dans cette réponse ).JKS
a changé enJCEKS
Voici un article qui présente différents types de keystore en Java et les différences entre les différents types de keystore. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Vous trouverez ci-dessous les descriptions des différents keystores de l'article:
la source
Si vous utilisez Java 8 ou plus récent, vous devez absolument choisir
PKCS12
la valeur par défaut depuis Java 9 ( JEP 229 ).Les avantages par rapport à
JKS
etJCEKS
sont:PKCS12
est un format standard, il peut être lu par d'autres programmes et bibliothèques 1JKS
etJCEKS
sont assez peu sûrs. Cela peut être vu par le nombre d'outils pour forcer brutalement les mots de passe de ces types de keystore, particulièrement populaires parmi les développeurs Android. 2, 31 Il y a JDK-8202837 , qui a été corrigé dans Java 11
2 Le nombre d'itérations pour PBE utilisé par tous les types de keystore (y compris PKCS12) était plutôt hebdomadaire ( CVE-2017-10356 ), mais cela a été corrigé dans 9.0.1, 8u151, 7u161 et 6u171
3 Pour en savoir plus:
la source