有哪些现有的客户端架构可通过PC/SC智能卡读卡器(ISO 7816-3,ISO 14443)从通用浏览器(通过http(s)连接到服务器)访问本地智能卡,最好使用Javascript,并且对终端用户的最小安装困扰?服务器至少需要能够向智能卡发出其选择的APDU(或者也许将其中一部分委托给它生成的客户端代码)。我假设在客户端可以获得完整的PC/SC堆栈,包括智能卡读卡器。这至少在Windows自XP以来、现代的OS X和Unix上是一个合理的假设。
到目前为止,我已经确定了以下选项:
一些自定义的ActiveX。这是我现有应用程序所使用的(我们在公司内部开发),一旦客户获得安装ActiveX的许可,使用IE进行部署非常容易,但它不符合“通用浏览器”的要求。
更新:ActiveX主要由已停用的IE支持,包括IE11;但Edge不支持。
一些使用Netscape插件API的PC/SC浏览器扩展,似乎是上述方法的平稳扩展。我找到的唯一现成的一个是SConnect (webarchive)。它不再推广(更新:尽管仍然在至少一个应用程序中活跃维护和使用),它的API 文档(webarchive)不再正式提供,并且它与特定智能卡和读卡器供应商有着紧密联系。这个原则可能很好,但为每个平台制作这样的插件需要大量的工作。
更新:NPAPI被许多浏览器放弃,包括Chrome和Firefox。
一个Java小程序,运行在Oracle的JVM(1.)6或更高版本之上,带有
[更新,2021年2月]:这个答案在2015年认为WebUSB API是一个有前途的解决方案,然后在2019年报告说不能工作或被放弃。我在那里发了一个问题there。
任何其他想法吗? 此外:是否有办法防止不良服务器滥用浏览器具有的任何PC/SC接口(例如,提供3个错误的PIN码以封锁卡,只是出于恶意;或者进行更邪恶的事情)?
到目前为止,我已经确定了以下选项:
一些自定义的ActiveX。这是我现有应用程序所使用的(我们在公司内部开发),一旦客户获得安装ActiveX的许可,使用IE进行部署非常容易,但它不符合“通用浏览器”的要求。
更新:ActiveX主要由已停用的IE支持,包括IE11;但Edge不支持。
一些使用Netscape插件API的PC/SC浏览器扩展,似乎是上述方法的平稳扩展。我找到的唯一现成的一个是SConnect (webarchive)。它不再推广(更新:尽管仍然在至少一个应用程序中活跃维护和使用),它的API 文档(webarchive)不再正式提供,并且它与特定智能卡和读卡器供应商有着紧密联系。这个原则可能很好,但为每个平台制作这样的插件需要大量的工作。
更新:NPAPI被许多浏览器放弃,包括Chrome和Firefox。
一个Java小程序,运行在Oracle的JVM(1.)6或更高版本之上,带有
javax.smartcardio
。从功能角度来看,这很好,有很好的文档,我可以忍受一些已知的错误,但我担心Java作为浏览器扩展的接受度会出现不可抵制的下降趋势。
[更新,2021年2月]:这个答案在2015年认为WebUSB API是一个有前途的解决方案,然后在2019年报告说不能工作或被放弃。我在那里发了一个问题there。
任何其他想法吗? 此外:是否有办法防止不良服务器滥用浏览器具有的任何PC/SC接口(例如,提供3个错误的PIN码以封锁卡,只是出于恶意;或者进行更邪恶的事情)?