从智能卡中写入和读取证书

5
我们希望在我们的应用程序中构建一个模块,允许用户使用智能卡或 USB 令牌签署 PDF/Word 文档。我们的应用程序是用 Java 编写的,所以最好使用 Java 解决方案,但如果使用其他语言更容易,只要在 Windows 上运行即可。
是否有任何库可以让我从智能卡中读取和写入证书。我想避免低级别操作并将所有这些字节流发送到卡片。但如果这是唯一的方法,我会感激有人能给我一个好的教程/示例链接。
此外,我在一些教程中看到人们将证书从智能卡导入其本地密钥库中。为什么他们要这样做?我不能直接使用来自卡片的证书吗?
提前感谢您的帮助。

一些智能卡供应商提供带有PKCS#11 API的中间件,而Java也有一些PKCS#11库。 - Biffen
JCA提供了SunPKCS11与智能卡进行接口。请参阅Java加密架构Oracle提供程序文档 - jww
1个回答

1
智能卡上的证书通常通过PKCS#11 API(跨平台方式)访问,在Windows上可以通过Windows证书存储访问。正如评论中提到的,Java本身支持这两种方式,但是存在一些限制/错误。
然而,仅访问证书本身不足以对PDF或Word文档进行签名 - 这两种格式都将签名作为其组成部分,并且您需要编写代码来签署这些格式的文档,或者使用现有的库。对于PDF,可以使用iText(请注意许可证!)或我们的SecureBlackbox。两者都支持PKCS#11。对于Office文档,我不知道是否有SecureBlackbox的替代品。我们的库支持Java提供的PKCS11和Windows CertStore接口以及我们自己的JNI模块。
关于“将证书导入密钥库” - 这是为了枚举和搜索证书而完成的。这些密钥库是“虚拟”的,因为它们映射智能卡证书。此外,当进行这样的映射时,私钥仍留存在硬件设备上,不会被复制(在大多数情况下技术上不可能)。因此,需要使用私钥的加密操作仍在设备上执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接