2016-11-29 10 views
0

У меня есть Java KeyStore (JKS), и мне нужно прочитать его с BouncyCastle.Читать JKS с BouncyCastle

Я добавил BC поставщика в верхней части списка провайдеров:

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

Если я создаю KeyStore так:

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

Я получаю сообщение об ошибке:

java.security.KeyStoreException: JKS not found

Если я не укажу поставщика, KeyStore будет создан с помощью провайдера и keystore.aliases() будет содержать EmptyEnumeration.

Как я видел в this теме, BouncyCastle может работать с JKS

Как я могу прочитать JKS с BouncyCastle?

+1

Вы добавили следующую строку вверху вашей программы: 'Security.addProvider (новый BouncyCastleProvider());'? См. [Раздел 6.0] (https://www.bouncycastle.org/specifications.html). –

+0

@ Mr.Polywhirl Да. Я отредактировал описание – Kirill

+1

Вы путаете «работать с» и «внедрять». Обычно вы не должны указывать поставщика в любом из методов 'getInstance()' JCE. Просто добавьте поставщика с 'Security.addProvider()' и пусть JCE найдет реализации от любого поставщика. Только поставщики Oracle реализуют хранилище ключей JKS, но ваш «KeyStore.getInstance» («JKS», «BC»); «заставляет JCE смотреть только на BouncyCastle для реализации JKS, которого у него нет. Кроме того, не добавляйте поставщика BouncyCastle в определенную позицию, если вы действительно не знаете, что делаете. –

ответ

2

Применение БКС вместо JKS

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

можно найти в разделе 6.4-Keystore из 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.

результат будет таким же, как поставщика Sun. Если вы получаете пустой список, проверьте, что JKS не пуст, и вы правильно его читаете.

+0

Я пробовал это, и в этом случае 'keystore.aliases()' возвращает 'EmptyEnumeration' – Kirill

+1

Имеет ли ваше хранилище ключей сертификат? Проверьте с помощью 'keytool -list -v -keystore keystore.jks' Вы читаете хранилище ключей таким образом ?:' keystore.load (inputStream, password); ' – pedrofb

+0

Да, я могу видеть этот сертификат с помощью keytool с теми же параметрами – Kirill

Смежные вопросы