我正在使用以下内容:
新的有趣的JRE 7 64bit不再支持Sun PKCS11(它在“sun.security. pkcs11”包中)。最大的问题是我们公司产品的最终用户可能安装了任何版本的JRE。
所以我必须将“Sun PKCS11”中现有的to代码替换为“IAIK PKCS11 Wrapper”。IAIK的包装器简单地这样工作:
(iaik-wrapper.jar)->(iaik-pkcs11-jni.dll)->(pki-token-driver.dll)
PKI令牌驱动程序动态链接库由PKIUSB令牌制造商提供,实际名称为“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文件,但不知何故它不兼容。我陷入了这个瓶颈。
正如EJP在问题下方的评论中所指出的,ca2-v34. dll是一个32位的dll。制造商的示例usb令牌管理器是一个32位的软件,因此它可以在Windows 32和Windows 64上加载此dll文件。
JRE的场景不同: