我有一个 Web 应用程序,其中一些数据(不是文件)需要使用 PKI 私钥进行数字签名。PKI 证书和私钥将位于 USB Cryptotoken 中,当插入 USB 插槽时,该加密令牌会向浏览器注册证书。这减轻了使用证书进行身份验证的痛苦,因为我通过在我的应用程序中触发 ssl-renegotiation 来做到这一点。
但是,使用证书进行数字签名似乎有点棘手。我可以想到几种方法来做到这一点
CAPICOM - http://en.wikipedia.org/wiki/CAPICOM 这适用于支持 CAPICOM 的浏览器(例如 IE)。然而,微软似乎已经停止了这一点。
Mozilla 加密对象 - https://developer.mozilla.org/en-US/docs/JavaScript_crypto
WebCrypto API - 大多数浏览器尚不支持。
自定义 Java Applet 或一些开源免费提供的 JavaApplet 控件。
还有其他选择吗?
我试图弄清楚在 Web 应用程序中执行此操作的常见、方便和安全的方法是什么。
笔记:
- 我可以只支持流行的浏览器。
- 我正在签署一小段数据——比如 100-200 字节而不是文件。
- 我更喜欢 PKCS#7 签名。