因此,直到Windows7还存在一个微软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和类似的呢?
发布于 2016-11-09 07:11:17
一般来说,由于缺乏对Java或silverlight浏览器的支持,目前是不可能的。
Chrome已经放弃对NPAPI插件的支持。火狐已经宣布将在2017年停止使用,Edge没有支持。微软已经反对Silverlight,而Oracle也宣布不再支持Java浏览器插件。只有旧版本的IE可以使用。
Javascript密码库(如PKI.js、锻造或内置WebCryptographyApi )可用于执行数字签名,但它们无法访问操作系统KeyStore,因此无法访问已安装的证书。
替代办法(不太令人鼓舞):
发布于 2016-11-13 15:02:36
实际上,我已经创建了一个.NET ActiveX对象,并使用X509Certificate2UI类和来自同一个名称空间的其他类来显示有关证书的信息,并对一些数据进行签名。
Pros:不需要使用CAPICOM。
Cons:它仍然是一个ActiveX组件,所以它只能在Internet中使用。
但这对我的当事人来说没问题,所以我走了这条路。
https://stackoverflow.com/questions/40497439
复制相似问题