如何使用浏览器中的证书的私钥(CAPICOM替代)签署文档?

时间:2016-11-08 22:21:57

标签: javascript security certificate x509certificate capicom

因此,在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 和类似的呢?

2 个答案:

答案 0 :(得分:2)

一般情况下,由于缺乏对Java或Silverlight的浏览器支持,目前无法实现

Chrome已放弃对NPAPI插件的支持。 Firefox已经宣布将在2017年停止使用它,Edge没有支持。微软已弃用Silverlight,甲骨文也宣布弃用Java浏览器插件。只能使用旧版本的IE。

PKI.jsforge或内置WebCryptographyApi等Javascript加密库可用于执行数字签名,但他们无法访问操作系统KeyStore ,因此您无法访问已安装的证书

替代品(不太令人鼓舞):

  • 使用 WebCryptographyApi 在浏览器中加载证书(不适用于智能卡)
  • 启动设备上安装的本地应用程序,并通过协议调用,使用嵌入式http服务器或使用chrome messaging api
  • 耐心等待 Key Discovery Api ,这将提供对WebCrypto的操作系统密钥库的访问

答案 1 :(得分:0)

实际上我已经创建了一个.NET ActiveX对象,并使用<b:if cond='data:blog.pageType == "index"'> <title> <data:blog.title/> </title> <b:else/> <title> <data:blog.pageName/> </title> </b:if> 类和来自同一名称空间的其他类来显示有关证书的信息并签署一些数据。

优点:无需使用CAPICOM。

缺点:它仍然是一个ActiveX组件,因此仅在Internet Explorer中可用。

但这对我的客户来说还可以,所以我采取了这条道路。