1

iaik pkcs#11 ラッパー (バージョン 1.3、最新の atm) から簡単なサンプル コードを実行しようとしていますが、すぐに応答NoSuchMethodErrorpkcs11Module.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);

例外スタック トレースは次のとおりです。

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)

同様のコードは 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)
11/26/13 21:30:50   CALL: exiting  (in Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_connect)

スマート カードに付属のユーティリティ アプリケーションは正常に動作し、opensc pkcs11-tool も正常に動作します。

編集:

バージョン 1.2.17 の pkcs11 ラッパー ライブラリとそれに付随する dll を使用すると、上記のコードは問題なく動作します。しかし、元の質問は未解決のままです。

EDIT2:

SubOptimal によって提案された次のコードは、次の出力を生成します。

@Test
public void testFindLibrary() {
    String lineSeparator = System.getProperty("path.separator");
    String libraryPath = System.getProperty("java.library.path");
    for (String dir : libraryPath.split(lineSeparator)) {
        File f = new File(dir + "/" + "pkcs11wrapper.dll"); 
        if (f.exists()) {
            System.out.println("found in: " + f.getAbsolutePath());
        }
    }
}

出力:

found in: C:\Windows\system32\pkcs11wrapper.dll
found in: C:\Windows\system32\pkcs11wrapper.dll
found in: C:\Windows\system32\pkcs11wrapper.dll
4

3 に答える 3

0

新しいコンピューターに移動した後、問題は解消されました。Java ライブラリ / システム パスのどこかに別のバージョンの DLL が存在する可能性があります。

于 2014-08-29T06:19:36.183 に答える