Невозможно загрузить драйвер PKCS11 с помощью IAIK PKCS11 Wrapper

Я использую следующее:

  • Windows 7 64-битная
  • JDK 7, 64-разрядная версия
  • JRE 7 64-битная

Новая забавная 64-битная JRE 7 больше не поддерживает Sun PKCS11 (который находится внутри пакета sun.security.pkcs11). И большая проблема в том, что конечные пользователи продукта нашей компании могли установить любую версию JRE.

Поэтому мне нужно заменить существующий код в Sun PKCS11 на Оболочка IAIK PKCS11 '. Обертка от IAIK работает просто так:

(iaik-wrapper.jar)->(iaik-pkcs11-jni.dll)->(pki-token-driver.dll)

Библиотека динамической компоновки драйвера токена PKI предоставляется производителем USB-токена PKI и имеет фактическое имя ca2-v34.dll. Метод загрузки этого собственного драйвера описан в руководстве программиста, как показано ниже:

import iaik.pkcs.pkcs11.*;
...

Module pkcs11Driver;
try {
  pkcs11Driver = Module.getInstance("ca2-v34.dll"); //<--exception!
  pkcs11Driver.initialize(null);

  //test
  System.out.println(pkcs11Driver.getInfo());
}
catch (Exception ex) {
  System.out.println(ex);
}

Исключение возникает в строке, отмеченной в приведенном выше коде, со следующей подробностью: java.io.IOException:% 1 не является допустимым приложением Win32. ca2-v34.dll

Это исключение, безусловно, означает, что библиотека IAIK нашла файл .dll, но он почему-то несовместим. Я застрял в этом узком месте.


person jondinham    schedule 08.01.2013    source источник
comment
Похоже, ca2-v34.dll - это 32-битная DLL.   -  person user207421    schedule 08.01.2013
comment
образец менеджера токенов USB, предоставленный нашим производителем, использует этот файл .dll как для windows7-32bit, так и windows7-64bit. Я сравнил два файла, они идентичны, поэтому я считаю, что эту dll можно использовать как в 32-битной, так и в 64-битной версиях.   -  person jondinham    schedule 08.01.2013
comment
Это означает только то, что их программное обеспечение является 32-битным. Вы не можете использовать 32-битную DLL из 64-битного программного обеспечения, по крайней мере, без создания промежуточного уровня, если это все еще возможно: нам приходилось делать это немного при переходе от 16 до 32 бит.   -  person user207421    schedule 09.01.2013
comment
Спасибо. да, вы правы, мне нужно временно переключиться на jre32, чтобы иметь возможность собирать и запускать. Я подам заявку на получение 64-битной dll драйвера от производителя.   -  person jondinham    schedule 09.01.2013


Ответы (1)


Как отметил EJP в комментариях прямо под вопросом, ca2-v34.dll - это 32-битная dll . Образец диспетчера токенов USB от производителя является 32-битным программным обеспечением, поэтому он может загружать этот файл DLL как в Windows 32, так и в Windows 64.

Сценарий JRE другой:

  • Если на клиентском компьютере установлена ​​32-битная JRE, приложение Java (файл .jar) может работать нормально, потому что процесс JVM - это 32-битный процесс.
  • В другом случае на клиентском компьютере установлена ​​64-битная JRE, приложение Java не может работать нормально, поскольку JVM в данном случае является 64-битным процессом, оно может загружать приложение Java. (.jar файл), но не может загрузить файл 'ca2-v34.dll' по той причине, что этот файл dll является 32-битной dll.
person jondinham    schedule 09.01.2013