【背景條件】
USBKEY的工作原理本文就不做詳細描述了。我們這里的使用場景就是通過USBKEY做瀏覽器端的注冊以及瀏覽器端登錄時的身份驗證。
一般來說,在瀏覽器端調用USBKEY需要在IE環境下,通過使用ActiveX控件來實現。ActiveX 控件是用于互聯網的很小的程序,有時稱為插件程序。它們會允許播放動畫,或幫助執行任務,是Microsoft為抗衡Sun Microsystems的JAVA技術而提出的,此控件的功能和java applet功能類似。通過注冊DLL動態鏈接庫到注冊表CLSID中,在IE瀏覽器端使用<OBJECT>控件并指定其屬性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.既然插件行不通,而且還要支持網站兼容和正常訪問。突然想到一句話,計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決。那么我們就可以通過自己實現中