在Chrome中使用USBKEY的经验

2020/08/19      12800 文章来源:杨浩东

【背景条件】

USBKEY的工作原理本文就不做详细描述了。我们这里的使用场景就是通过USBKEY做浏览器端的注册以及浏览器端登录时的身份验证。

一般来说,在浏览器端调用USBKEY需要在IE环境下,通过使用ActiveX控件来实现。ActiveX 控件是用于互联网的很小的程序,有时称为插件程序。它们会允许播放动画,或帮助执行任务,是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和java applet功能类似。通过注册DLL动态链接库到注册表CLSID中,在IE浏览器端使用控件并指定其属性classid等于之前DLL注册的CLSID,这样便可以在浏览器端调用USBKEY的相关的功能。注意这里有一个大前提即是只支持在IE下调用。

【硬件选择】

本文中使用的是飞天诚信的epass1000ND的usbkey,其定位集中在普通的企业客户使用自带的私有算法(HMAC-MD5),开发简单,能够迅速的集成到项目中,登录过程使用双因子,避免系统客户账户密码泄密造成的安全隐患。

epass1000ND有两种用法:证书体系, 证书是基于PKI体系实现,需要证书和签名控件支持,一般情况下需要联系CA公司或者自身有对PKI体系有完整理解的情况下使用,开发较为复杂,建议用在安全等级较高的场景,比如:PDF签名、转账交易;其他情况不建议企业使用;自有实现,自带算法HMAC-MD5,这种用法适合企业加固自身系统安全,比如OA登录等,开发较为简单,本文主要讲解的也是这种用法。

自有实现采用了HMAC-MD5,KEY自带了这个算法,算法的网上有很多的教程,这里就不在详述了。

【业务流程】

注册:注册一般由管理员操作,主要的工作是完成对USBKEY的SNID识别、对KEY密钥写入、及数据库保持对应的SNID、KEY和密钥。

认证:认证由客户登录的时候发起,使用SNID和随机数进行验证,对比服务器和客户端的SNID以及随机数验证码,通过则允许登录系统,实现了每个用户对应使用不同的usbkey登录。

【实现方式】

为了解决怎么在chrome中使用Usbkey这个问题,我查找试验了很多方式,记录描述如下,也算是一种经验总结。

A.首先想到是chrome插件。于是在网上搜索查找,找到了一款名为ActiveX for chrome的插件。于是下载安装,发现chrome42版本之后的不在支持,大概是因为chrome42版本之后不再支持NPAPI插件的原因。下载chrome浏览器42版本之前的历史版本,发现网站很多样式类似IE浏览器一样不兼容,遂作罢。

B.既然插件行不通,而且还要支持网站兼容和正常访问。突然想到一句话,计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。那么我们就可以通过自己实现中