从智能卡写入和读取证书

时间:2014-08-26 10:28:50

标签: java ssl smartcard

我们希望在我们的应用程序中构建一个模块,允许用户使用智能卡或USB令牌签署pdf / word文档。我们的应用程序是用Java编写的,所以使用java的解决方案会很好但是如果用另一种语言更容易,我不介意使用它,只要它适用于Windows。

是否有任何库允许我从智能卡读取和写入证书。我想避免低水平并将所有这些字节流发送到卡。但如果这是这样做的唯一方法,我会很感激,如果somone可以给我一个很好的教程/例子的链接。

我在一些教程中也看到,人们正在将智能卡中的证书导入到他们的本地密钥库中。他们为什么这样做?我不能直接使用卡上的证书吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

智能卡上的证书通常通过PKCS#11 API(跨平台方式)访问,在Windows上可通过Windows证书存储区访问。正如评论中所提到的,Java本身支持两种方式,尽管Java提供程序中存在一些限制/错误。

但是,访问证书本身并不足以签署PDF或Word文档 - 这两种格式都包括签名作为其组成部分,您需要编写代码来签署这些格式的文档,或者使用现有的库。对于PDF,它可以是iText(观看许可证!)或我们的SecureBlackbox。两者都支持PKCS#11。对于Office文档,我不知道SecureBlackbox的替代方案。我们的库支持Java提供的PKCS11和Windows CertStore接口以及我们自己的JNI模块。

关于“将证书导入密钥库” - 这样做是为了枚举和搜索证书。这些密钥库是“虚拟的”,因为它们映射智能卡证书。此外,当完成这样的映射时,私钥保留在硬件设备上并且不被复制(在大多数情况下这在技术上是不可能的)。因此,无论如何都要在设备上执行需要私钥的加密操作。