2016-11-29 3 views
0

私はJava KeyStore(JKS)を持っており、BouncyCastleで読む必要があります。私はこの方法キーストアを作成した場合BouncyCastleでJKSを読む

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

は::私はプロバイダのリストの一番上にBCプロバイダを追加しました

java.security.KeyStoreException: JKS not found

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

を私はエラーを取得しますプロバイダを指定しない場合、KeyStoreはSunプロバイダで作成され、 keystore.aliases()EmptyEnumerationを含みます。

私はthisトピックで見たように、はBouncyCastleは、私ははBouncyCastleでJKSを読むことができますどのようにJKS

で作業することができますか?

+1

プログラムの先頭に次の行を追加しましたか: 'Security.addProvider(new BouncyCastleProvider());'? [Section 6.0](https://www.bouncycastle.org/specifications.html)を参照してください。 –

+0

@ Mr.Polywhirlはい。私は説明を編集しました – Kirill

+1

あなたは "働いている"と "実装中"を混同しています。通常は、JCEの 'getInstance()'メソッドのどれかでプロバイダを指定しないでください。 'Security.addProvider()'とプロバイダを追加するだけで、JCEはどのプロバイダからでも実装を見つけることができます。 OracleプロバイダのみがJKSキーストアを実装していますが、KeyStore.getInstance( "JKS"、 "BC");はJCE実装にはBouncyCastleだけを見なければなりません。また、あなたが何をしているのか本当に分かっていない限り、特定の位置にBouncyCastleプロバイダを追加しないでください。 –

答えて

2

代わりにJKS

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

参照セクション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.

の6.4-キーストアの使用BKS結果は、Sunプロバイダと同じになります。空リストを取得した場合はJKSが空でないことを確認し、正しく読んでいることを確認してください。

+0

これを試しましたが、この場合、 'keystore.aliases()'は 'EmptyEnumeration'を返します – Kirill

+1

あなたのキーストアに証明書がありますか? 'keystore.load(inputStream、password);' – pedrofb

+0

はい、私は同じパラメータでkeytoolを使ってこの証明書を見ることができます – Kirill