2

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

4

2 回答 2

2

通常,由于缺乏对 Java 或 silverlight 的浏览器支持,目前是不可能的。

Chrome 已放弃对 NPAPI 插件的支持。Firefox 已宣布将于 2017 年停止使用,Edge 不支持。Microsoft 已弃用 Silverlight,Oracle 也宣布弃用 Java 浏览器插件。只能使用旧版本的 IE。

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

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

  • 在浏览器中使用WebCryptographyApi加载证书(不适用于智能卡)
  • 启动安装在您设备上的本地应用程序并通过协议调用,使用嵌入式 http 服务器或使用 chrome 消息传递 api
  • 耐心等待Key Discovery Api,它将提供对 WebCrypto 的 OS 密钥库的访问权限
于 2016-11-09T07:11:17.827 回答
0

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

优点:无需使用 CAPICOM。

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

但这对我的客户来说没问题,所以我选择了这条路。

于 2016-11-13T15:02:36.323 回答