从浏览器读取智能卡
Posted
技术标签:
【中文标题】从浏览器读取智能卡【英文标题】:Reading a smartcard from browser 【发布时间】:2012-09-06 12:20:40 【问题描述】:我正在开发一个 php/mysql 应用程序,商店端详细说明了一些数据,用于下一步, 我需要将智能卡读卡器与浏览器(Chrome、Firefox、IE)连接起来,以提取数据并将其保存到 mysql 数据库中。
我找不到任何有用的东西,所以我来这里是为了获得一些信息/帮助。 怎么可能呢?
【问题讨论】:
你找到解决办法了吗? 【参考方案1】:唯一可以合理确定的方法是在 Java 中创建一个 Applet,跳出沙箱并尝试使用 javax.smartcardio
库。由于它在 javax
中,因此不确定它是否存在,您可能会触发一些额外的访问规则。
Applet 应该被签名并且用户应该表明 Applet 是可信的。当然,计算机上应该安装一个相对较新的 Java 运行时。 javax.smartcardio
默认只能使用 PCSC 智能卡读卡器,因此您必须确保有一个。此外,PCSC 和javax.smartcardio
确实采用符合 ISO 7816 标准的处理器卡。
之前您有时可以使用 Java 小程序安装本机库以与智能卡通信,但对于当前的操作系统,我绝对不相信这会起作用。
准备大量工作和大量测试。
更新 2016-12-24
Applet 即将淘汰 - 在 Java 9 中,它们所依赖的插件已被弃用,但尚未删除。这不是直接的答案,但使用 Java Web Start 可能是解决此问题的方法。
关于浏览器中的密码学有很多想法,例如网络加密 API。关于直接智能卡访问,它确实似乎仍然在思考,而不是在行动。在撰写本文时,似乎不包括对安全令牌的访问。
一种常见但有些棘手的方法是为浏览器提供智能卡插件。然而,这需要浏览器支持(对于每个单独的浏览器)、管理员权限。许多浏览器试图从诸如此类的插件结构中迁移出去,因此这种解决方案可能不会成为未来的证明。
最后,您可以使用(签名的)本机应用程序并从浏览器中引用它。该应用程序可以在应用程序中提供。各种操作系统的商店。
【讨论】:
亲爱的 Maarten,3 年后,这个答案还有其他解决方案和更新吗? (我的目标是 IE9!) 对于IE9???确实是 3 年后,你还在寻找 IE9 的答案吗?答案是:不要在不受支持的浏览器上执行安全相关的操作。小程序也不再受支持,这已经改变了。 我目前工作的公司内部开发了一种不直接依赖浏览器的产品。相反,它更类似于 Maarten Bodewes 的最后一块。它适用于 Mac、Linux 和 Windows,从 Windows XP 到 Windows 10 Anniversary。如果您仍在寻找解决方案,我相信他们会热衷于与您讨论。有兴趣可以私信我。【参考方案2】:您很可能必须开发本机应用程序,该应用程序将按需安装到浏览器并在完全信任的情况下执行以访问计算机设备,例如阅读器或至少证书存储或系统 API。
然后,您将向浏览器提供脚本接口,例如 NPAPI 或用于 IE 或其他专有脚本技术的 ActiveX/COM。
【讨论】:
以上是关于从浏览器读取智能卡的主要内容,如果未能解决你的问题,请参考以下文章
从通用浏览器访问智能卡的架构?或者:如何弥合从浏览器到 PC/SC 堆栈的差距?