Библиотека PKCS#11 не найдена в 64-битной Windows

В моей работе у меня есть требование подписать файл XML сертификатом от SmartCard. Все работает нормально, но на 32-битной виртуальной машине Windows 7. Проблемы возникают, когда я пытаюсь использовать тот же код в 64-битной Windows 10. Я получаю сообщение об ошибке «PKCS # 11 не найден» и «нет такого алгоритма». Я использую пакет xades4j. Я пробовал, наверное, все решения, найденные в Интернете, т.е.

  1. Использовались разные библиотеки .dll (pkcs11.dll, opensc-spy.dll, CPPkiP.dll, esp2003csp11.dll) как в 32-битной, так и в 64-битной версиях.
  2. Поместил .dll в каталоги System32 и SysWOW64.
  3. Обновлены драйвера для моей читалки (IDBridge CT30).
  4. Поменял jre на 32bit.
  5. Использовал решения из справочника PKCS11 (без xades4j) - тоже работало только на 32 бит.

Ничего не помогает и всегда происходят одни и те же исключения. Если у кого-то есть идеи, что еще я мог бы сделать, я буду очень благодарен за советы.

С наилучшими пожеланиями.

Caused by: java.security.KeyStoreException: PKCS11 not found
at java.security.KeyStore.getInstance(Unknown Source)
at java.security.KeyStore$Builder$2$1.run(Unknown Source)
at java.security.KeyStore$Builder$2$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: PKCS11 for provider SunPKCS11-SmartCard
at sun.security.jca.GetInstance.getService(Unknown Source)
at sun.security.jca.GetInstance.getInstance(Unknown Source)
at java.security.Security.getImpl(Unknown Source)
... 11 more

person Artur    schedule 21.02.2019    source источник
comment
Какую версию Java вы используете (на 64-битной машине)?   -  person lgoncalves    schedule 21.02.2019
comment
Я использовал jre1.8.0_201 (как 32-битные, так и 64-битные)   -  person Artur    schedule 22.02.2019


Ответы (1)


Я нашел библиотеку, которая решила мою проблему. Это https://github.com/esig/dss. Я использовал JavaSE11 (jdk-11.0.2), pkcs11.dll, помещенный в каталог C:/Windows/System32. Перед запуском приложения необходимо добавить аргумент VM -Djava.security.debug=sunpkcs11,pkcs11

person Artur    schedule 20.03.2019