如何使用浏览器中的证书私钥对文档进行签名(CAPICOM备选)?
问题描述:
所以,直到Windows 7中有一个微软ActiveX组件:CAPICOM,这也可以从JavaScript调用,然后显示客户端机器上的证书存储的内容。然后客户可以选择适当的证书并用证书的私钥签署一些文件。 这就是访问证书存储在Javascript中的样子:如何使用浏览器中的证书私钥对文档进行签名(CAPICOM备选)?
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不支持。微软已经弃用Silverlight,并且甲骨文也宣布弃用Java浏览器插件。只有旧版本的IE可以使用。
的JavaScript加密库,如PKI.js,forge或内置WebCryptographyApi可以用来进行数字签名,但他们没有进入手术系统密钥库,所以你不能访问到已安装的证书
替代品(并不十分令人鼓舞):
- 使用WebCryptographyApi加载证书的浏览器(不适用于智能卡)
- 启动一个本地应用安装在装置上,并通过协议调用,使用嵌入式HTTP服务器或与铬消息API
- 耐心等待到Key Discovery Api将与访问OS密钥库WebCrypto
答
其实我已经创建了一个.NET ActiveX对象和使用X509Certificate2UI
阶级和他人相同的命名空间,以显示有关证书的信息,并签署一些数据。
优点:没有必要使用CAPICOM。
缺点:它仍然是一个ActiveX组件,所以它只在Internet Explorer中可用。
但是,这是确定为我的客户,所以我走上这条道。