我试图从运行iaik PKCS#11包装简单的示例代码(1.3版,最新的ATM),但得到NoSuchMethodError的pkcs11Module.initialize电话。
Module pkcs11Module = Module.getInstance("siecap11");
pkcs11Module.initialize(null);
Slot[] slots = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);
for (Slot s: slots) {
System.out.println(s.getSlotID());
}
pkcs11Module.finalize(null);
Run Code Online (Sandbox Code Playgroud)
异常堆栈跟踪如下
java.lang.NoSuchMethodError: iaik.pkcs.pkcs11.wrapper.PKCS11.C_Initialize(Ljava/lang/Object;Z)V
at iaik.pkcs.pkcs11.Module.initialize(Module.java:308)
at test.pkcs11.Pkcs11Service.listSlotsWithTokens(Pkcs11Service.java:98)
at test.pkcs11.TestPkcs11Service.testListSlots(TestPkcs11Service.java:35)
Run Code Online (Sandbox Code Playgroud)
类似的代码在 Linux 上运行良好,所以我猜 pkcs11wrapper.dll 有问题。
pkcs11wrapper.dll并且siecap11.dll都在c\windows\system32目录中并且都是 32 位模块。
我尝试了不同的 pkcs#11 提供程序、调试和发布版本的 pkcs11wrapper,但结果是一样的。
pkcs11wrapper.dll 的调试版本生成以下输出:
11/26/13 21:30:50 CALL: entering (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_initializeLibrary)
11/26/13 21:30:50 CALL: exiting (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_initializeLibrary)
11/26/13 21:30:50 CALL: entering (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect)
11/26/13 21:30:50 INFO: connect to PKCS#11 module: siecap11 ... (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect) …Run Code Online (Sandbox Code Playgroud)