【发布时间】:2018-04-24 12:32:32
【问题描述】:
我想使用仅使用 JavaScript 的客户端证书签署包含 Web 浏览器中敏感数据的 XML 文档 (XMLDSig)。
我进行了研究并发现,在 2014-2015 年,不可能使用客户端证书在 JS 中签署文档。当时有三种可能:
- Java 小程序
- ActiveX 组件
- 网络浏览器插件(NPAPI,...)
现在有什么新的可能性吗?我们在 2018 年,我能够找到的绝大多数资源都是 3-4 年的。所以我真的很好奇是否有一个纯粹基于 Javascript 和一些行业标准的跨平台和跨浏览器的解决方案。
【问题讨论】:
-
客户端证书将存储在哪里?
-
证书应存储在系统或网络浏览器密钥库中。无法将加密的证书存储在光盘上。
-
如果您使用新的 WebCryptographyApi 将证书存储在浏览器中,您将能够仅使用 javascript 进行数字签名。但是你不能使用系统密钥库(例如 Windows 密钥库)
-
你能告诉我它是如何工作的吗?我试图挖掘一些信息,发现只提到了“WebCrypto Key Discovery”。但它看起来还没有在浏览器中实现。
-
不考虑“密钥发现 API”。它只是访问系统证书存储库所需的服务的定义。它没有被实施。你可以找到 webcrypto 规范here。它允许使用本机 api 生成或导入密钥。它是一个低级 api:可以使用加密算法,但不能执行 XML 签名或导入 PKCS#12 文件等高级操作