Нет такого алгоритма: PKCS11 для провайдера SunPKCS11-CartaoCidadao

Есть мои текущие провайдеры:

0 - Имя провайдера: SUN 1 - Имя провайдера: SunRsaSign 2 - Имя провайдера: SunEC

...

9 - Название провайдера: SunPKCS11-CartaoCidadao

Девятый поставщик, который я пытаюсь использовать, использует библиотеку pkcs11.

Provider prov = Security.getProvider("SunPKCS11-CartaoCidadao");
keyStore = KeyStore.getInstance("PKCS11", prov );

Используя метод info, я вижу, что он использует библиотеку:

System.out.println(prov.getInfo());

SunPKCS11-CartaoCidadao с использованием библиотеки /usr/local/lib/libpteidpkcs11.so

Тем не менее, в то время как я пытаюсь получить ключевой экземпляр, он говорит мне, что для этого провайдера нет PKCS11, что он должен.

KeyStore ks = KeyStore.getInstance("PKCS11","SunPKCS11-CartaoCidadao");
keyStore.load( null, null );

java.security.KeyStoreException: PKCS11 не найден

Причина: java.security.NoSuchAlgorithmException: нет такого алгоритма: PKCS11 для провайдера SunPKCS11-CartaoCidadao

У кого-нибудь есть идеи, как решить эту проблему?

2 ответа

Несмотря на возможность видеть, что провайдер был успешно добавлен/вставлен, и егоgetInfo()показывая путь к фактической библиотеке PKCS# 11 вашего устройства,

java.security.KeyStoreException: PKCS11 не найден

дается, если илиslot(см. ссылку) не был указан правильно. Провайдер SunPKCS11 перечисляет все слоты, даже те, в которых нет токена, поэтомуslotListIndexдолжны быть указаны соответственно.

Второй параметр должен иметь тип Provider,

Используйте следующее:

KeyStore ks = KeyStore.getInstance("PKCS11",prov);
Другие вопросы по тегам