2016-10-03 16 views
0

Моя цель - прочитать информацию с карточки CAC и использовать pkcs11, чтобы извлечь из нее информацию и подписать мой документ. Я не мог найти правильный DLL для моего оборудования, поэтому я установил openSC на моей машине и использовать opensc-pkcs11.dll в следующем коде:java.security.KeyStoreException: PKCS11 не найден

String configName = "pkcs.cnf"; //my config file that points to opensc-pkcs11.dll 
String PIN = "123456"; 
Provider p = new sun.security.pkcs11.SunPKCS11(configName); 
Security.addProvider(p); 
KeyStore keyStore = KeyStore.getInstance("PKCS11"); 
char[] pin = PIN.toCharArray(); 
keyStore.load(null, pin); 

Но я получаю сообщение об ошибке по следующему адресу

KeyStore keyStore = KeyStore.getInstance("PKCS11"); 

с StackTrace Error:

java.security.KeyStoreException: PKCS11 not found 
    at java.security.KeyStore.getInstance(Unknown Source) 
    Caused by: java.security.NoSuchAlgorithmException: no such algorithm: PKCS11 for provider SunPKCS11-FooAccelerator 
    at sun.security.jca.GetInstance.getService(Unknown Source) 
    at sun.security.jca.GetInstance.getInstance(Unknown Source) 
    at java.security.Security.getImpl(Unknown Source) 
    ... 2 more 

Помощь!

+0

Я считаю, что проблема с вашей .dll, проверка если это правильный файл dll, вы ссылаетесь на – mhasan

+0

Почему вы не используете KeyStore keyStore = KeyStore.getInstance («PKCS11», p); чтобы получить хранилище ключей, может помочь вам приблизиться к вашей проблеме – mhasan

+0

@mhasan, это тоже не сработало. Могу ли я загрузить DLL из Интернета? Я использую карту CAC – dexter

ответ

0

Сначала создайте config.cfg, как показано ниже:

name=name of your CAC card 
slot=1 
library=C:\Windows\System32\eps2003csp11.dll 
\\This is the dll file for etoken like this when you are installing driver, a separate dll file would be generated for your CAC card. 

Затем укажите путь конфигурационного файла в программе, как показано ниже:

Provider p = new sun.security.pkcs11.SunPKCS11(configFilepath); 
Security.addProvider(p); 
+0

Я заметил недавнее редактирование этого сообщения, которое резко изменило ваше намерение. Пожалуйста, проверьте, действительно ли это ваше намерение или нет. – Danh