因此,在 Windows 7 之前,存在一个 Microsoft ActiveX 组件:CAPICOM,可以从 Javascript 调用该组件,然后显示客户端计算机上证书存储的内容。然后,客户端可以选择适当的证书并使用证书的私钥签署某些文档。 这就是在 Javascript 中访问证书存储的方式:
var MyStore = new ActiveXObject("CAPICOM.Store");
var oCertificates = new ActiveXObject("CAPICOM.Certificates");
// attempt to open the personal certificate store
MyStore.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY);
如今使用 CAPICOM 的替代方案是什么?我希望客户端能够在浏览器中使用他的私钥对某些文本进行签名,然后将使用公钥签名的文本发送到服务器。还有可能吗?
也许我可以使用 Java 或 Silverlight 而不是纯 JavaScript? PKI.js 和类似的怎么样?
最佳答案
一般来说,由于浏览器缺乏对 Java 或 silverlight 的支持,目前不可能。
Chrome 已放弃对 NPAPI 插件的支持。 Firefox 已宣布将于 2017 年停止支持,Edge 也不支持。 Microsoft 已弃用 Silverlight,Oracle 也宣布弃用 Java 浏览器插件。只能使用旧版本的 IE。
Javascript 加密库,例如 PKI.js , forge或内置 WebCryptographyApi可用于执行数字签名,但它们无权访问操作系统 keystore ,因此您无法访问已安装的证书
替代方案(不是很令人鼓舞):
- 使用 WebCryptographyApi 在浏览器中加载证书(不适用于智能卡)
- 启动安装在您设备上的本地应用,并使用嵌入式 http 服务器或 Chrome 消息传递 API 通过协议(protocol)进行调用
- 耐心等待Key Discovery Api 这将提供对 WebCrypto 的操作系统 keystore 的访问
关于javascript - 如何使用浏览器中的证书私钥对文档进行签名(CAPICOM 替代方案)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40497439/