Java 7 Windows 64 位上的 PKCS#11

PKCS#11 on Java 7 Windows 64 bit

我需要在 64 位 Windows 上使用 PKCS#11 和 Java 7 从智能卡读取证书。 The oracle docs 说没有用于 64 位的 Sun PKCS#11 提供程序 Windows。如果我理解正确,这意味着即使我有一个 PKCS#11 本机库,我也没有 Java "bridge" 类 来与本机 PKCS#11 实现交互。我有哪些选择?我能想到这些:

找了好久都没有找到解决办法。最接近的是 OpenJDK 实现,但我无法从 Oracle JDK 切换到 OpenJDK.

我错过了什么吗?为什么没有明显的解决方案?我有哪些选择?

非常感谢。

所有选项均可。

外部程序需要您为每个平台编写本机代码。

实现缺少的提供程序是可能的,特别是如果 OpenJDK 中存在一个提供程序并且您可以从那里借用它(如果许可证允许)。

至于 third-party 库 - 我只知道我们自己的 SecureBlackbox,它在内部实现所有安全性并通过 JNI 与 PKCS#11 设备一起工作。

Java 7 本身没有选项的原因是您使用的是 end-of-life 产品。你真的应该升级到 Java 8.

也就是说,Sun/Oracle PKCS#11 提供程序建立在 PKCS#11 wrapper from IAIK 之上。由于 Java 8 有一个 64 位版本的提供程序,那么这可能意味着也可以为 Java 7 编译它。

但是,即使您让包装器工作,也并不一定意味着您让 Java 7 提供程序使用它。 Java 7 个提供商也需要签名,因此即使您可以让提供商与 Java 7 PKCS#11 提供商一起工作,您也可能 运行 遇到麻烦。但是,您可以直接使用 PKCS#11 功能。当然你会失去提供者的好处,主要是与更高级别的互操作 API 的 TLS,XML-digsig 等

当然IAIK也出售他们自己的提供者,已经过安全评估等。部分文档如下:

Note, if you have a 64-bit PKCS#11 module of your crypto hardware, you must also use the 64-bit version of the Wrapper native library, and you must also use a 64-bit Java™ VM (e.g. java -d64 ...).