Нет такого алгоритма: 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);