java - 从智能卡写入和读取证书

标签 java ssl smartcard

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

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

我还在一些教程中看到,人们正在将证书从智能卡导入到他们的本地 keystore 中。他们为什么要那样做?我不能直接使用卡中的证书吗?

预先感谢您的帮助。

最佳答案

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

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

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

关于java - 从智能卡写入和读取证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25503573/

相关文章:

ssl - MobileFirst 6.3 iOS CFNetwork SSLHandshake 失败 (-9824),而服务器支持 TLS1.2

smartcard - 智能卡中的安全盒是什么以及作用是什么?

cryptography - Java 卡 : domain parameters for key agreement?

security - EMV 安全消息传递

java - 从 WAR 中复制 DLL 会导致 LF 变成 CRLF

java - 从文本文件中读取数据,将每个单词转换为 PigLatin

node.js - 如何在弹性平衡器等负载平衡器后面设置双 http 和 https 服务器

java - 测试 Ajax - 在 Apache Wicket 中提交表单

java - 使用哈希表在目录中查找文本文件是否有效?

php - Prestashop 迁移,index.php 未执行