从通用浏览器(通过 http(s) 连接到服务器)访问本地智能卡的可能客户端体系结构是什么,最好是从 Javascript,最终用户的安装麻烦最少?服务器至少需要能够向卡发出它选择的 APDU(或者可能将其中的一些委托给它生成的客户端代码)。我假设在工作 PC/SC 堆栈的客户端可用,并配有智能卡读卡器。至少在自 XP、现代 OS X 和 Unix 以来的 Windows 上,这是一个合理的假设。
到目前为止,我已经确定了以下选项:
- 一些自定义的 ActiveX。这就是我现有的应用程序使用的(我们内部开发的),一旦获得安装 ActiveX 的许可,对于使用 IE 的客户来说,部署非常容易,但它不符合“通用浏览器”的要求。
更新:ActiveX 主要由已弃用的 IE 支持,包括 IE11;但不是由边缘。 - 一些使用 Netscape Plugin API 的 PC/SC 浏览器扩展,这似乎是上述的平滑扩展。我找到的唯一现成的是SConnect (webarchive)。它不再被推广(更新:认为在 2020 年末至少在一个应用程序中仍在积极维护和使用),它的 API文档(webarchive)不再正式可用,它与特定的智能卡和读卡器供应商有着密切的联系。原理可能很好,但是为每个平台制作这样的插件将是很多工作。
更新:许多浏览器都放弃了对 NPAPI 的支持,包括 Chrome 和 Firefox。 - 一个 Java 小程序,运行在 Oracle 的 JVM (1.)6 或更高版本之上,带有
javax.smartcardio
. 从功能的角度来看这很好,有据可查,我可以忍受少数已知的错误,但我担心在接受 Java 作为浏览器扩展方面会出现不可抗拒的螺旋式下降。 - [更新,2021 年 2 月]:这个答案认为 WebUSB API 在 2015 年是一个很有前途的解决方案,然后在 2019 年报告说不能工作或被放弃。我在那里提出了一个问题。
还有什么想法吗?
另外:有什么方法可以防止恶意服务器滥用浏览器的任何 PC/SC 接口(例如,提供 3 个错误的 PIN 码来阻止卡,只是为了它的肮脏;或者做一些更邪恶的事情)。