4

正如我在这里读到的:

“与大多数 Java 加密体系结构 (JCA) 提供程序不同,Sun PKCS#11 提供程序不直接实现加密功能;它依赖于将所有操作转发到的本机 PKCS#11 实现。此实现必须以 .dll 的形式提供“

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

4

3 回答 3

5

PKCS#11 参考指南是一个很好的起点。

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

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

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

请注意,对于生产代码,您当然应该CallbackHandler按照指南中的说明实现一个正确的 - 以上只是为了快速检查一切是否正常。

于 2012-05-07T16:57:25.143 回答
4

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

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

[编辑]

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

联系金雅拓,看看他们是否有 JCA 提供商,他们应该肯定知道。

于 2012-05-06T22:21:59.220 回答
3

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

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

于 2012-05-07T03:53:32.973 回答