2016-11-29 1 views
0

J'ai un Java KeyStore (JKS) et je dois le lire avec BouncyCastle.Lire JKS avec BouncyCastle

J'ai ajouté fournisseur BC en haut de la liste des fournisseurs:

Security.insertProviderAt(new BouncyCastleProvider(), 1); 

Si je crée KeyStore cette façon:

final KeyStore keystore = KeyStore.getInstance("JKS", "BC"); 

Je reçois une erreur:

java.security.KeyStoreException: JKS not found

Si je ne spécifie pas de fournisseur, le KeyStore sera créé avec le fournisseur Sun et keystore.aliases() contiendra EmptyEnumeration.

Comme je l'ai vu dans le sujet this, BouncyCastle peut travailler avec JKS

Comment puis-je lire JKS avec BouncyCastle?

+1

Avez-vous ajouté la ligne suivante en haut de votre programme: 'Security.addProvider (nouveau BouncyCastleProvider());'? Reportez-vous à [Section 6.0] (https://www.bouncycastle.org/specifications.html). –

+0

@ M.Polywhirl Oui. J'ai édité la description – Kirill

+1

Vous confondez "travailler avec" et "mettre en œuvre". Vous ne devez normalement pas spécifier le fournisseur dans l'une des méthodes 'getInstance()' de JCE. Ajoutez simplement le fournisseur avec 'Security.addProvider()' et laissez le JCE trouver les implémentations de n'importe quel fournisseur. Seuls les fournisseurs Oracle implémentent le fichier de clés JKS mais votre 'KeyStore.getInstance (" JKS "," BC "); 'force le JCE à ne regarder que BouncyCastle pour une implémentation JKS qu'il n'a pas. En outre, n'ajoutez pas le fournisseur BouncyCastle à une position particulière, sauf si vous savez vraiment ce que vous faites. –

Répondre

2

Utilisation BKS au lieu de JKS

KeyStore keystore = KeyStore.getInstance("BKS", "BC"); 

Voir la section 6.4-Keystore de https://www.bouncycastle.org/specifications.html

The Bouncy Castle package has three implementation of a keystore. The first "BKS" is a keystore that will work with the keytool in the same fashion as the Sun "JKS" keystore.

Le résultat sera le même que le fournisseur du Soleil. Si vous obtenez une liste vide, vérifiez la JKS est pas vide et que vous lisez correctement

+0

J'ai essayé ceci et dans ce cas 'keystore.aliases()' renvoie 'EmptyEnumeration' – Kirill

+1

Votre keystore a-t-il un certificat? Vérifiez avec 'keytool -list -v -keystore keystore.jks' Êtes-vous en train de lire le fichier de clés de cette manière ?:' keystore.load (fluxEntrée, mot de passe); ' – pedrofb

+0

Oui, je peux voir ce cert en utilisant keytool avec les mêmes paramètres – Kirill