fgr*_*ieu 52 cross-browser smartcard pcsc
从通用浏览器(通过http(s)连接到服务器),最好是从Javascript访问本地智能卡的可能的客户端架构有哪些,最终用户的安装麻烦最少?服务器需要能够至少向卡发出其选择的APDU(或者可能将其中的一部分委托给它生成的客户端代码).我假设在工作PC/SC堆栈的客户端可用,配有智能卡读卡器.自XP,现代OS X和Unix以来,至少在Windows上这是一个合理的假设.
到目前为止,我已确定了以下选项:
javax.smartcardio
.从功能的角度来看,这很好,有充分的记录,我可以忍受一些已知的错误,但我害怕在接受Java-as-a-browser-extension时不可抗拒的向下螺旋.还有其他想法吗?
另外:是否有某种方法可以防止浏览器滥用浏览器所拥有的任何PC/SC接口(例如,提供3个错误的PIN来阻止卡片,只是为了它的肮脏;或者制造一些更邪恶的东西).
Sup*_*arp 25
更新(8/2016):正在讨论一种名为WebUSB API的Web新API .您已经可以在Chrome v54 +上使用它了.
该标准将在所有主流浏览器中实施,并将取代对Smard卡的第三方应用程序或扩展的需求:-)
所以新答案是肯定的!
类似OSI的架构堆栈是:
注意: Google宣布他们将在2017年放弃Chrome应用.
以前的anwser:
现在(2015年),您可以使用chrome.usb
API创建Google Chrome应用.
然后通过其符合CCID标准的界面访问智能卡读卡器.
它不是跨浏览器,而是JavaScript可编程和跨平台.
无论如何,现代浏览器不再支持Netscape Plugin API(NPAPI).浏览器供应商正在驳斥Java applet.
Mar*_*jak 24
事实上,除了建立SSL之外,浏览器不能将(加密)智能卡用于其他目的.
您应该需要额外的代码,由浏览器执行,访问智能卡.
有几十个自定义和专有插件(使用你提到的所有三个选项)用于各种目的(签名是最受欢迎的,我猜),因为没有标准或普遍接受的方式,至少在欧洲,我相信其他地方同样.
创建,分发和维护自己的应用程序将是一个爆炸性的,因为浏览器每个月左右发布一次,每个新版本都会更改sanboxing和UI技巧,因此您可能需要经常调整代码.
您可能希望拥有GUI功能,至少是为了要求用户访问卡或其上的某些功能.
为了创建一个多平台,多个浏览器插件,可以使用类似firebreath的东西.
就个人而言,我不认为将PC/SC暴露在网络上是有益的.PC/SC本质上是一个低级协议,当暴露这个时,您也可以公开对磁盘的块级访问,并希望"Web上的应用程序只是我的,并且它们表现良好"(这应该回答你的"同时").同时像SConnect这样的瘦补丁是最容易创建的,用于提供javscript plugin.sendAPDU()样式代码(或者只是包装所有PC/SC API并让javascript调用者处理相同级别的细节与本机PC/SC API用例一样).
为此目的创建插件通常是由于当前的严重缺陷所致.
解决未来(移动等)是另一个故事,像W3C webcrypto和OpenMobile API这样的东西最终可能会以某种方式创建一些东西,将客户端密钥容器暴露给Web应用程序.如果您的智能卡目标是加密,我的建议是避免使用PC/SC并使用平台服务(Windows上的CryptoAPI,OSX上的Keychain,Linux上的PKCS#11)
任何类型的设计都有要求.如果您考虑使用密钥而不是任意APDU,则这一切都适用.如果您的要求是发送任意APDU,请创建一个插件,然后继续使用它.
小智 7
我刚刚发布了一个解决此问题的beta插件.此测试版代码可在此处获得:
https://github.com/ubinity/webpcsc-firebreath
这个插件基于firebreath框架,并已在Linux/WinXP/Win7下使用Fireofx和Chrome进行了beta测试.提供源代码和扩展包.
基本思想是提供PCSLite API访问,然后在此基础上开发更友好的JS-api.
此插件正在积极开发中,因此请随时发送任何报告和请求.
对于你的第一个问题,我不抱什么希望:要么你对智能卡功能的一小部分感到满意(例如签署电子邮件或 PDF),那么你可以使用一些现成的软件(例如 PKCS),最好由智能卡公司,或者您想要更广泛的功能并且需要您自己投入大量的精力。当然,PCSC 是选择的起点。
至少对于你的“也:”还有一些希望。
1) 请注意,某些规范(例如 ICAO/德国 BSI TR-3110)要求采用一种方法,其中 PIN 不会被阻止,但在错误计数器达到 1 后会在回复之前使用大量时间。最后的尝试必须使用不同的命令来启用,否则不会进行进一步的比较和错误计数器调整。
2) 只需通过要求安全消息传递来保护验证命令。敏感应用程序对所有内容都使用安全消息传递,因此第一步会协商会话密钥,然后将其应用于所有后续命令和响应。结果是,在错误计数器的比较或修改完成之前,命令就因 MAC 不正确而被拒绝。