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