正如我在这里读到的:
“与大多数 Java 加密体系结构 (JCA) 提供程序不同,Sun PKCS#11 提供程序不直接实现加密功能;它依赖于将所有操作转发到的本机 PKCS#11 实现。此实现必须以 .dll 的形式提供“
智能卡提供商是否有义务拥有 jca 提供商?例如,我在哪里可以找到 gemalto 的 jca 提供者?
正如我在这里读到的:
“与大多数 Java 加密体系结构 (JCA) 提供程序不同,Sun PKCS#11 提供程序不直接实现加密功能;它依赖于将所有操作转发到的本机 PKCS#11 实现。此实现必须以 .dll 的形式提供“
智能卡提供商是否有义务拥有 jca 提供商?例如,我在哪里可以找到 gemalto 的 jca 提供者?
PKCS#11 参考指南是一个很好的起点。
金雅拓智能卡总是附带一个 PKCS#11 DLL,不幸的是它有不同的名称,具体取决于卡。只需查看安装时附带的文件,直到找到一个带有“p”和“11”的 DLL :)
找到它之后,您可以按照参考指南中给出的步骤进行操作,即创建一个指向 PKCS#11 库等的配置文件。如果一切顺利,您应该能够像访问智能卡一样简单
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, "pin".toCharArray());
请注意,对于生产代码,您当然应该CallbackHandler
按照指南中的说明实现一个正确的 - 以上只是为了快速检查一切是否正常。
智能卡提供商是否有义务拥有 jca 提供商?例如,我在哪里可以找到 gemalto 的 jca 提供者?
不,当然不是,这完全取决于合同中的内容。您很可能会获得与 PKCS#11 兼容的库(具有或多或少的功能,具体取决于提供商/卡)。很可能但可能没有完全测试这与 PKCS#11 提供程序兼容,这对配置的方式有点挑剔。真正的 JCA 提供者的交付是罕见的,如果你能得到一个真正有效的,你就很幸运了。
[编辑]
关于标题中的不同问题:只有 Sun PKCS#11 提供程序要求您配置.dll
. 其他可能需要一个,具体取决于实现。如果提供程序依赖于操作系统支持(例如 CAPI 提供程序使用 Windows 功能),它可能需要一个不可配置的.dll
或.so
在库路径上的某个位置。Bouncy Castle 和其他纯 Java 提供程序通常不需要任何.dll
或.so
.
联系金雅拓,看看他们是否有 JCA 提供商,他们应该肯定知道。
您所指的 PKCS#11 DLL 是能够使用 PKCS#11 API 的应用程序与特定加密硬件实现之间的接口。由于每个加密硬件都不同,它需要自己的 PKCS#11 DLL。因此,如果应用程序设计为通过 PKCS#11 与加密硬件进行通信,则它必须调用供应商提供的 DLL。因此,并不是 Java 没有 PKCS#11 的本机实现,而是 PKCS#11 的设计方式。
我认为没有任何硬件供应商有义务提供 JCA 模块,而且其中许多(如果不是大多数)只提供 PKCS#11 驱动程序和 CryptoAPI 模块(CSP)。