Javascript 的数字签名

Digital signature with Javascript

所以我被这个问题困住了:

IE Edge 不再允许小程序、activeX 等,

我有这个 applet 用于 数字签名,

想法是从客户端的KEY文件中提取私钥,这样私钥就永远不会离开客户的计算机,这是安全要求,无法避免:(

我正在寻找 API 或框架,但我找不到解决这个问题的方法,

jsrsasign 示例使用 PEM 文件,但我的用户有 .CER + .KEY + 密码,在 java 我可以做到,但我需要在 java脚本或客户端的东西

并且,阅读我发现的 Web Cryptography API and some examples,他们生成 NEW 私钥和 public 密钥来签名,但他们从未阅读过现有的 证书

有人遇到这个问题或知道我可以使用的框架吗? 请帮帮忙!

您不一定需要强制您的 Web 应用程序在 Edge 中运行,因为它不再支持您的 Web 应用程序正在使用的旧技术。

"Use Enterprise Mode with Microsoft Edge to open Internet Explorer 11 for your business’s sites that require IE’s proprietary technologies."

将您的站点添加到企业模式站点列表中,以便它在 IE11 中自动打开:

一旦 Edge 检测到您的网络应用程序正在使用专有技术,它会告诉您在 IE11 中打开您的网站。

步骤和详细信息可以在 Microsoft Edge 团队的博客 post 中找到,并查看博客的用户体验部分,这样您就会了解它将带给您的用户体验实施后的用户:

http://blogs.windows.com/msedgedev/2015/08/26/how-microsoft-edge-and-internet-explorer-11-on-windows-10-work-better-together-in-the-enterprise/

所以答案是使用 JSRSASIGN (http://kjur.github.io/jsrsasign/) in the examples posted in github it uses PEM files, I build an example to use CER+ KEY + PASSWORD >> https://github.com/alfredomova/firmaJs-with-jsrsasign-example,

对于那个具体的例子,我使用了 sparkMD5(https://github.com/satazor/SparkMD5) 来计算文件的哈希值。

现代浏览器不再支持 ActiveX、小程序。 WebCrypto API 动态生成和使用密钥,但无法从证书存储访问证书。

Alfredo M 提供的公认答案也提出了问题,指向 JavaScript 处理浏览器中的密码术,不涉及访问本地证书存储。最近证书不是 generated/issued 作为 pfx(或 PEM)文件,而是在 USB 令牌或智能卡等加密设备上。

因此我们需要为现代浏览器使用浏览器扩展,其中浏览器后面的应用程序 运行 可以访问证书存储并对哈希进行签名。我公司免费提供了一个这样的browser extension。您只需要几行 JavaScript 代码即可调用任何浏览器扩展提供的方法,从而从现代浏览器实现数字签名。如果您只想签署文件或 eReturns,则不需要任何服务器端组件。如果你想签署 pdf,你可能需要服务器端的 pdf 组件。