2016-01-04 64 views
1

我需要在64位Windows上使用带有Java 7的PKCS#11,以便从智能卡读取证书。 The oracle docs表示没有适用于64位Windows的Sun PKCS#11提供程序。如果我理解正确,这意味着即使我有一个PKCS#11本机库,我也没有Java“桥”类与本机PKCS#11实现进行交互。我有什么选择?我能想到这些:Java 7上的PKCS#11 Windows 64位

  • 使用外部程序,例如,一个命令行实用程序与智能卡交互并将输出传送到我的Java应用程序
  • 以某种方式实现Java中缺少的PKCS#11提供程序? (我想避免这项工作)
  • 使用第三方Java库来实现缺少的Sun提供程序?

经过大量搜索,我还没有找到解决方案。最接近的是OpenJDK实现,但我无法从Oracle JDK切换到OpenJDK。

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

非常感谢。

回答

1

Java 7本身没有选项的原因是您使用的是报废产品。您应该真正升级到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功能。当然,你会失去提供商的好处,主要是与TLS,XML-digsig等更高级API的互操作。

当然,IAIK也出售自己的提供商,这已经过安全评估等。文档如下:

注意,如果您的加密硬件有64位PKCS#11模块,则还必须使用64位版本的Wrapper本机库,并且还必须使用64位版本的“ bit Java™VM(例如java -d64 ...)。

+0

我已经使用了IAIK提​​供程序。它运作良好。 – EJP

+0

是的,如果你准备咳嗽面团,可能是最好的/最简单的选择。注册后有可用的评估版本。 –

+0

谢谢。看起来我们将转换到Java 8。 – Atuos

0

所有选项都是可能的。

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

实现缺少的提供者可能是可能的,尤其是在OpenJDK中存在的情况下,您可以从那里借用它(如果许可证允许)。

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