我需要使用Web浏览器使用客户端证书(智能卡)创建一些XML数据的数字签名。通常我习惯在客户端执行java applet。在操作系统和浏览器方面,多平台的好处是多方面的。
然而,从长远来看,这种选择越来越难以实施和支持。实际上,所有浏览器都需要某种操作才能执行此类applet,现在几乎必须使用受信任证书进行代码签名,新的清单属性等等。一些额外的安全层没有任何问题,我对此感到满意。
然而,截至2015年4月,谷歌Chrome已经停止了对Java小程序(以及其他插件)的支持 - 有一个配置开关,但是如here所述,它将不会更长时间。
Mozilla Firefox没有NPAPI的支持终止日期,但他们称之为“legacy technology”
至于IE - 它不支持Modern UI中的插件。
因此,Java applet不再是一个普遍的选择,我的选择是什么? 到目前为止我所调查的内容:
我没有想法了。欢迎并赞赏所有建议。
答案 0 :(得分:3)
我几周前做了同样的研究,对我来说第一个选择是迁移到firefox(至少目前为止)。
另一种方法是,可以将applet迁移到JNLP java客户端应用程序(可能在java客户端/服务器/网页之间有一些websocket / restful同步)。
我认为你提到的选项在浏览器中的支持比java applet少。
答案 1 :(得分:2)
我想恢复以前因缺乏信息而删除的答案。我的回答并没有提供完整的信息,但由于我遇到了同样的问题并偶然发现了这个问题,我想分享我的发现。
我还有一个额外的要求,以便浏览器签名适用于"较旧的" (IE9)浏览器。
意大利智能卡制造商Bit4id分发了https://www.4identity.eu/的网络API。
然而,4identity API并不是一个完整的网络API"这依赖于普通的Javascript,因为它仍然需要下载一个仅限Windows的客户端(原文如此!)。据我所知,客户端响应自定义keychain
URL协议(我有一个关于如何处理桌面应用程序的过去Oauth-2相关问题......)根据我的发现,这不是标准。客户端可以访问密钥存储区,因此可以将签名文件上载到正在由Ajax页面轮询的远程Web服务。
我需要做一些文书工作才能获得完整的API访问权限,而且我没有关于定价的信息。不过,我认为值得详细介绍一下。
支持来自浏览器的真实数字签名需要浏览器供应商和负责监管Web标准的W3C做出很多努力,也许就像他们为HTML5中的DRM解决方案标准化所做的那样努力多媒体公司(批评模式)。目前有 WebCrypto标准,但根据research,#34;主流浏览器"
无法使用使用智能卡对远程文件进行数字签名需要访问密钥库和密码库的实现。社区可以期待PaDES / CaDES的开源实现,但是如果没有最终实现访问密钥存储区的标准方法,则无法访问智能卡。
另见this answer。
这个答案的另外一部分不适用于我的情况,因为我要求它在旧浏览器上工作。
免责声明:我
答案 2 :(得分:0)
用户浏览器扩展程序,例如免费的Sigher.Digital Chrome扩展程序。
此扩展有2个符号类型JavaScipt方法:
SignerDigital.signGstHash(hash)-使用SHA-256提供CMS(PKCS7)签名
SignerDigital.signITHash(hash,PAN)-提供RSA SHA-256哈希符号
必需的功能方法可以添加到此扩展中。边缘扩展正在运行,不久将可用。
答案 3 :(得分:0)
有一个可在OSX,Windows和Linux上运行的客户端可安装应用程序,该应用程序通过Web加密polyfill公开智能卡。
它称为FortifyApp,您可以here了解其工作原理。
有了它,用于签名的用户体验看起来就像一个本机应用程序。