如何使用浏览器中的证书私钥对文档进行签名(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.jsforge或内置WebCryptographyApi可以用来进行数字签名,但他们没有进入手术系统密钥库,所以你不能访问到已安装的证书

替代品(并不十分令人鼓舞):

  • 使用WebCryptographyApi加载证书的浏览器(不适用于智能卡)
  • 启动一个本地应用安装在装置上,并通过协议调用,使用嵌入式HTTP服务器或与铬消息API
  • 耐心等待到Key Discovery Api将与访问OS密钥库WebCrypto
提供

其实我已经创建了一个.NET ActiveX对象和使用X509Certificate2UI阶级和他人相同的命名空间,以显示有关证书的信息,并签署一些数据。

优点:没有必要使用CAPICOM。

缺点:它仍然是一个ActiveX组件,所以它只在Internet Explorer中可用。

但是,这是确定为我的客户,所以我走上这条道。