如何使用来自浏览器的证书私钥对文档进行签名(CAPICOM替代方案)

How to sign the document with a certificate's private key from the browser (CAPICOM alternative)?

本文关键字:CAPICOM 方案 文档 何使用 浏览器 私钥 证书      更新时间:2023-09-26

所以,在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? pk .js和类似的呢?

一般来说,目前是不可能的由于浏览器缺乏对Java或silverlight的支持。

Chrome已经不再支持NPAPI插件。Firefox已经宣布将在2017年停止使用Edge浏览器,Edge浏览器也不支持。微软已经弃用了Silverlight, Oracle也宣布弃用Java浏览器插件。只能使用旧版本的IE。

Javascript加密库,如PKI.js, forge或内置的WebCryptographyApi可用于执行数字签名,但是它们无法访问操作系统密钥库,因此您无法访问已安装的证书

替代方案(不太令人鼓舞):

  • 使用WebCryptographyApi在浏览器中加载证书(不用于智能卡)
  • 启动本地应用程序安装在您的设备上,并通过协议调用,使用嵌入式http服务器或chrome消息传递api
  • 耐心等待密钥发现Api,它将为WebCrypto
  • 提供访问操作系统密钥库的权限

事实上,我已经创建了一个。net ActiveX对象,并使用X509Certificate2UI类和来自同一名称空间的其他类来显示有关证书的信息并签署一些数据。

优点:不需要使用CAPICOM

Cons:它仍然是ActiveX组件,因此只能在Internet Explorer中使用。

但这对我的客户来说是可以的,所以我选择了这条路。