Java Crypto JCA Provider是否真的需要windows dll?

时间:2012-05-06 19:07:34

标签: java cryptography certificate smartcard

正如我在这里读到的那样:

  

“与大多数Java密码体系结构(JCA)提供商不同,Sun   PKCS#11 Provider不实现加密功能   直;它依赖于它的原生PKCS#11实现   转发所有操作。此实现必须以a身份提供   Windows中的.dll文件或UNIX和Linux中的.so文件。例如,如果   您使用适用于Windows的Utimaco SafeGuard智能卡提供程序   PKCS#11实现是库pkcs201n.dll。“

智能卡提供商是否有义务拥有jca提供商?例如,我在哪里可以找到gemalto的jca提供商?

3 个答案:

答案 0 :(得分:5)

PKCS#11 Reference Guide是一个很好的起点。

金雅拓智能卡总是附带一个PKCS#11 DLL,不幸的是它根据卡有不同的名称。只需查看安装附带的文件,直到找到包含“p”和“11”的DLL:)

找到它之后,您可以按照参考指南中给出的步骤进行操作,即创建指向PKCS#11库的配置文件等。如果一切顺利,您应该能够简单地访问智能卡如

KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, "pin".toCharArray());

请注意,对于生产代码,您应该按照指南中的说明实现正确的CallbackHandler - 上述内容仅用于快速检查一切是否正常。

答案 1 :(得分:4)

  

智能卡提供商是否有义务拥有jca提供商?例如在哪里   我可以找到gemalto的jca提供商吗?

不,当然不是,完全取决于合同中的内容。您很可能会获得PKCS#11兼容库(具有或多或少的功能,具体取决于提供商/卡)。可能但可能没有完全测试它与PKCS#11提供程序兼容,这对于事物的配置有点挑剔。实际的JCA提供商的交付是罕见的,如果你能得到一个真正有用的提供商,你很幸运。

[编辑]

关于标题中的不同问题:只有Sun PKCS#11提供商要求您配置.dll。其他人可能需要一个,具体取决于实施。如果提供程序依赖于OS支持(例如,CAPI提供程序使用Windows功能),则可能需要在库路径上的某个位置使用不可配置的.dll.so。 Bouncy Castle和其他纯Java提供商通常不需要任何.dll.so

联系金雅拓,了解他们是否有JCA提供商,他们应该确定。

答案 2 :(得分:3)

您所指的PKCS#11 DLL是能够使用PKCS#11 API的应用程序与特定加密硬件实现之间的接口。由于每个加密硬件不同,它需要自己的PKCS#11 DLL。因此,如果应用程序旨在通过PKCS#11与加密硬件进行通信,则必须调用供应商提供的DLL。因此,Java并不是PKCS#11的本机实现,而是PKCS#11的设计使用方式。

我认为任何硬件供应商都没有义务提供JCA模块,并且许多(如果不是大多数)它们只提供PKCS#11驱动程序和CryptoAPI模块(CSP)。