从Web浏览器访问智能卡读卡器?

27

是否可以从运行在同一台计算机上的Web浏览器(例如ActionScript、JavaScript或其他脚本)中访问连接到计算机的智能卡读卡器?

例如,我读到了ActionScript中的flash.external.ExternalInterface类的相关内容。它能用于访问智能卡读卡器吗,还是沙箱无法穿透?

7个回答

9

问:是否可以从运行在同一台计算机上的Web浏览器访问连接到计算机的智能卡读卡器?

答:是的,这是可能的。我使用签名的JAVA小程序做到了这一点。由于该Java小程序需要用户授权访问系统文件/硬件(就像允许小程序为您编写/编辑/删除文本文件一样),因此它必须被签名。

为什么要用Java?我使用的智能卡读卡器已经有了一个JAVA API,并且还有使用Java访问它的示例。但是,这些示例是使用swing编写的(类似于独立的桌面应用程序)。我所做的就是将Java swing代码简单地移植到浏览器上的小程序中。我成功地使用这个小程序通过要求智能卡、用户名和密码,在网站/ Web应用程序上进行登录和注销。相当安全,我想说。

源代码?虽然我很想分享它,但我受到公司合同的约束不能分享代码。只需找到使用Java的智能卡访问示例,并将其移植到小程序中(用于Web)

希望对您有所帮助


正确的答案,我也实现过(10年前),甚至使用了本地.dll文件。请注意,这个实现方法非常复杂,我们使用了一些“非法”的捷径,需要Java和Java安全更新,客户接受签署的小程序可以运行,可能需要在不同的浏览器上测试等等。在最后一个项目中,我快速重写了需求,以便我们可以使用(Java)“厚”客户端来代替。 - Maarten Bodewes
3
尽管这个答案是正确的,但它描述的情况非常不令人满意。特别是因为美国的国土安全部(以及许多安全专业人士,包括我在内)现在建议完全禁用浏览器的Java。我们非常需要一个标准和经过深思熟虑的智能卡JavaScript接口。制作一个JavaScript到PC/SC桥接程序相对容易; 困难的是使其既安全又方便用户使用。 - fgrieu
3
为了身份验证,这是绝对过度/黑客行为/安全漏洞。有开放标准,PKCS#11,可用于使用智能卡对用户进行网站应用程序认证。这归结为在服务器上配置 SSL 连接以要求客户端证书,并相应地配置浏览器。_它们_而不是浏览器沙盒中的网站应用程序将从智能卡读取。 - Marcel Stör
5
我有一个Java Applet的解决方案,现在需要寻找替代方案。由于Chrome浏览器和其他浏览器可能很快就不支持Java applets,而且带有NFC内置功能的移动平台已经存在问题。但是我现在还没有找到可替代的方案。 - Totoro53
答案应该更新;与此同时,Java Applets自2017年起已被弃用。请参阅openjdk.java.net/jeps/289。 - jasie
根据我的理解,今天最好的解决方案是使用浏览器扩展程序。我们公司提供的一种这样的浏览器扩展程序是免费的 Signer.Digital Chrome Extension。还有其他几个浏览器扩展程序可供选择。 - Bharat Vasant

5

4

我曾在2012年做过同样的事情,当时我是在一个提供Java Applet的旧工作基础上工作的。

现在[2015年12月],由于“最近”的安全问题以及对Java Applets的支持被取消,本地插件技术也正在停止使用,因此使用Java Applet甚至更加没有意义。

无论Java Applet当前的用处如何,根据@Glen Allen的答案,我没有受到合同的约束,这里是一个示例Applet的开源代码:https://github.com/ist-dsi/signature

它是建立在一篇论文的基础上的,可以生成这种格式的文档:http://www.w3.org/TR/xmldsig-core/ 更多关于为什么要这样做的信息可以在那篇MsC论文的摘要中找到:https://fenix.tecnico.ulisboa.pt/downloadFile/395139415358/resumo.pdf(作者是一位比论文作者更好的工程师,但如果您想了解该领域的最新技术水平,这可能是一个很好的起点,尽管有些过时)

在我给你们提供的代码中,有更多要求,事后看来并不明智,也没有知道这些要求就做了一些奇怪的技术选择,但请忽略那部分 :)

这里的一个答案暗示了PKCS_11和开放标准。也许诀窍在于一个智能卡读卡器驱动程序,它可以自动在客户端设置证书基础设施,我记得我不得不通过许多困难来设置我的身份证的智能卡,在Mac OS X上使用Chrome [据我所知,使用Apple的密钥库设置智能卡读卡器并不容易,而且也许在那个时候也不容易配置Chrome,使其使用客户端身份验证并请求访问Apple的密钥库]。

或者也许NFC + SmartCard和一个移动应用程序将是未来的发展方向。

这样做真的太浪费了,整个国家都有带有SmartCards的ID,许多政府服务已经有了WebApps,但两者之间没有简单的连接方式。

干杯。


4

2
您可以使用已签名的Java小程序来访问读卡器。已签名的小程序允许访问硬件外设,智能卡读卡器可以通过Java加密API进行访问。
希望这可以帮到您。

与此同时,Java Applets自2017年起已被弃用。请参见http://openjdk.java.net/jeps/289。 - jasie

0

如果您可以在文件系统上访问智能卡,就像连接 USB 驱动器并出现为单独的磁盘一样,那么您可以简单地使用 flash.net.FileReference


但他没有使用AIR,因此他无法做到这一点。至少在Flash/AS中不行。 - Philipp Kyeck
我想在与浏览器交互的智能卡中执行加密/解密/签名创建/签名验证操作;浏览器发送要加密和签名的明文,并从智能卡读卡器接收加密和签名数据。 - jlnme
Java Applet可能是实现这个的选项吗?或者说,Applet不能打破浏览器的沙盒限制吗? - jlnme
我不了解Java,但我认为它的安全限制是相似的,所以我不会指望它。pkyeck是正确的,你需要构建一个AIR应用程序来实现你想要完成的任务。有什么理由必须在浏览器中进行吗? - Chunky Chunk
它不一定要在浏览器中运行。这是一个首要需求,考虑到客户端没有安装的要求,但这可能只是我老板的一厢情愿想法 :-) - jlnme
显示剩余3条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接