Browser 使用智能卡或证书对浏览器中的数据进行数字签名

Browser 使用智能卡或证书对浏览器中的数据进行数字签名,browser,digital-signature,Browser,Digital Signature,我需要使用web浏览器使用客户端证书(智能卡)创建一些XML数据的数字签名。通常,我使用在客户端执行的java小程序来实现这一点。在操作系统和浏览器方面实现多平台的好处 然而,从长远来看,这一方案越来越难以实施和支持。实际上,所有浏览器都需要某种操作才能执行这样的小程序,使用可信证书的代码签名现在几乎是强制性的,新的清单属性等等。嗯,有一些额外的安全层是没有问题的,我同意这一点 然而,截至2015年4月,谷歌Chrome已经停止了对Java小程序(以及其他插件)的支持——有一个配置开关,但它不会

我需要使用web浏览器使用客户端证书(智能卡)创建一些XML数据的数字签名。通常,我使用在客户端执行的java小程序来实现这一点。在操作系统和浏览器方面实现多平台的好处

然而,从长远来看,这一方案越来越难以实施和支持。实际上,所有浏览器都需要某种操作才能执行这样的小程序,使用可信证书的代码签名现在几乎是强制性的,新的清单属性等等。嗯,有一些额外的安全层是没有问题的,我同意这一点

然而,截至2015年4月,谷歌Chrome已经停止了对Java小程序(以及其他插件)的支持——有一个配置开关,但它不会像上面所说的那样在更长的时间内可用。
Mozilla Firefox没有NPAPI的支持截止日期,但他们称之为“.”。
至于IE,它不支持现代UI中的插件

因此,随着Java小程序不再是真正的通用选项,我的选择是什么?
到目前为止,我所调查的是:

  • ActiveX-IE专用
  • Silverlight-根本无法访问证书,作为一个插件,它面临着与Java相同的限制
  • 特定于浏览器的扩展;例如,Firefox直到版本33以前都有window.crypto.signText,但现在不再有了
  • 客户端上安装的本地应用程序-不容易安装、支持、开发和更新多个操作系统及其不同版本
  • Web加密-“仅基本加密功能”,不支持证书

我没有主意了。欢迎并感谢所有建议。

几周前我做了同样的研究,我的第一个选择是迁移到firefox(至少现在是这样)

另一种方法是将小程序迁移到JNLP java客户机应用程序(可能在java客户机/服务器/网页之间进行一些websocket/restful同步)

我认为您提到的选项在浏览器中的支持不如java小程序。

专有API可用 我想恢复以前因缺少信息而删除的答案。我的回答并没有提供完整的信息,但因为我有同样的问题,并且偶然发现了这个问题,我想分享我的发现

我还有一个额外的要求,以便浏览器签名可以在“旧”(IE9)浏览器上工作

意大利智能卡制造商Bit4id在上发布了一个web API

然而,4identity API实际上并不是一个依赖于普通Javascript的完整“web API”,因为它仍然需要下载一个仅限Windows的客户端(原文如此!)。据我所知,客户机对自定义的
keychain
URL协议做出响应(我过去有一个关于如何处理桌面应用程序的Oauth-2相关问题……),根据我的发现,这不是标准的。客户端可以访问密钥存储,因此它可以将签名文件上载到由Ajax页面轮询的远程web服务

我需要做一些文书工作,以获得完全的API访问,我没有关于定价的信息。不过,我认为值得仔细看一看

问题的第二部分 从浏览器支持真正的数字签名需要浏览器供应商和负责监管web标准的W3C付出大量努力,可能与他们为了多媒体公司而在HTML5中标准化DRM解决方案的努力一样(批评模式)。目前有WebCrypto标准,但根据它在“主流浏览器”中不可用

使用智能卡对远程文件进行数字签名需要访问密钥存储和实施加密库。社区可以期待PaDES/CaDES的开源实现,但如果没有访问密钥存储的标准方式的最终实现,则无法访问智能卡

另见

答案的这一附加部分不适用于我的情况,因为我需要它在较旧的浏览器上工作


免责声明:我不是Bit4id的下属,但我认识他们,因为我有机会将他们的工作集成到我的应用程序中。我们的一位客户是Bit4id合作伙伴

只有一个更正:crypto.signText()已从Firefox中删除,但目前可作为扩展。是的,您的方法将继续变得越来越难实现。那是故意的。浏览器的目标是变得越来越安全,智能卡上的签名数据不适合这种模式。相反,将智能卡留在身后。集中存储私钥(或在云中)并集中签名。您的签名者仍将对其私钥拥有独占控制权,他们只是不会在智能卡中携带私钥。浏览器将支持越来越好的用户身份验证(例如,请参阅),但不支持在智能卡上签名。我理解你的观点,但至少在我的特定情况下,私钥和证书是在智能卡上分发的。(在我国)这样做有一个法律原因——所谓的合格数字电子签名应驻留在硬件设备上(“由用于安全签名创建的设备创建”)。另一方面,中央证书颁发机构是可能的,但前提是我的应用程序将证书颁发给我的客户机——情况并非总是如此。作为可与合格签名一起使用的集中式SSCD,已获得通用标准认证。它与web应用程序配合得很好。签名者的密钥位于网络上受硬件保护的盒子中。签名者的密钥可以由您当地的合格证书颁发机构通过CSR进行签名。WebCrypto支持相当不错,即使是在2月16日,请参见-如果您需要进行底层工作,您可以使用。这并不能解决智能卡问题,但认为其他人可以在这里捕捉到这一点。