1

我正在尝试使用我编写的 java 应用程序使用 eToken 对 pdf 文件进行签名。我正在使用带有 java 6.0.30 的 Windows 7 64 位版本。

当我运行应用程序时,我得到一个异常说

Exception in thread "signer" java.lang.UnsatisfiedLinkError: no j2pkcs11 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at sun.security.pkcs11.wrapper.PKCS11$1.run(PKCS11.java:88)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.security.pkcs11.wrapper.PKCS11.<clinit>(PKCS11.java:86)
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:281)
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:90)
    at com.greytip.cougar.pdfsigner.PdfSigner.getProvider(PdfSigner.java:364)

但是当我查找该j2pkcs11.dll文件时,该文件对 jdk 1.5 可用,但在我的 jdk 1.6 64 位中不可用。

是否与 java 安全策略有关,因为异常正在进入AccessController,即 dll 在 Windows 7 内的受保护目录中?

提前致谢。

4

2 回答 2

5

看起来 pkcs11 没有在任何 64 位版本的 java 中实现。它仅在 32 位版本中可用。

所以我打算安装一个 32 位版本的 java 并使用它。

于 2012-06-14T06:34:31.820 回答
0

我有类似的问题并在 jre-8u31-windows-x64 上测试了签名代码并取得了成功。所以我建议使用这个java版本。在我的场景中,我必须为一个名为 e-defter 的政府应用程序签署一个大小约为 196MB 的 xml 文件。要签署这个文件,java 需要大约 3GB 的内存(HEAP)。我可以用 64 位 java 获得这个内存。

于 2015-02-26T13:14:11.707 回答