一種javascript使用密碼設(shè)備的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及在互聯(lián)網(wǎng)WEB應(yīng)用中使用密碼設(shè)備的技術(shù)領(lǐng)域,尤其涉及多種不同內(nèi)核瀏覽器的跨平臺技術(shù)、WEB頁面腳本跨域訪問技術(shù)、瀏覽器插件技術(shù)。
【背景技術(shù)】
[0002]密碼設(shè)備是指使用密碼算法進(jìn)行密碼生成、存儲、運(yùn)算的設(shè)備,常見的有加密卡、加密機(jī)、智能密碼鑰匙(又稱USB_key,U盾)、操作系統(tǒng)的證書存儲區(qū)和加密服務(wù)。我國國密標(biāo)準(zhǔn)SM1/SM2等算法都要求必須硬件實(shí)現(xiàn)。密碼設(shè)備一般提供應(yīng)用接口(API),通過API可以操作密碼設(shè)備,但是密碼設(shè)備的API —般為C/C++接口。
[0003]調(diào)用密碼設(shè)備一般需要授權(quán),通常以pin碼的方式進(jìn)行。如果是遠(yuǎn)程調(diào)用的話,有一種授權(quán)認(rèn)證協(xié)議_0Auth2.0.0Auth2.0 (開放授權(quán)認(rèn)證)是一個開放標(biāo)準(zhǔn),允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲的私密的資源,而無需將用戶名和密碼等身份認(rèn)證信息提供給第三方應(yīng)用。
[0004]密碼設(shè)備由于屬于私密資源,目前的瀏覽器頁面都不支持直接訪問密碼設(shè)備,但是實(shí)際應(yīng)用中,如網(wǎng)上銀行等,在交易過程中都需要使用到數(shù)字簽名,需要調(diào)用密碼設(shè)備調(diào)用存儲在密碼設(shè)備中的數(shù)字證書進(jìn)行簽名運(yùn)算。有時候還需要在線更新密碼設(shè)備,如在線證書更新、延期等,都需要在WEB頁面上對密碼設(shè)備進(jìn)行操作。現(xiàn)在一般的實(shí)現(xiàn)方法就是使用瀏覽器的插件技術(shù)來擴(kuò)展瀏覽器的功能,使得WEB頁面可以通過瀏覽器插件使用密碼設(shè)備。
[0005]關(guān)于瀏覽器插件的技術(shù),不同內(nèi)核的瀏覽器插件技術(shù)不一樣,目前主要瀏覽器插件技術(shù)和對應(yīng)瀏覽器內(nèi)核如下:
1、ActiveX 技術(shù):適用 Trident ( Internet Explorer (簡稱 IE))的內(nèi)核的瀏覽器。
[0006]2,NPAPI技術(shù):適用Webkit內(nèi)核的Safari蘋果瀏覽器,以前谷歌Chrome瀏覽器,國內(nèi)品牌的瀏覽器的極速模式。Gecko內(nèi)核的FireFox火狐瀏覽器也使用NPAPI技術(shù)。
[0007]3、PPAPI技術(shù):適用Blink內(nèi)核的谷歌Chrome瀏覽器、Opera瀏覽器。
[0008]如果要實(shí)現(xiàn)WEB頁面對密碼設(shè)備進(jìn)行操作,首先就需要針對每種瀏覽器內(nèi)核的插件技術(shù)開發(fā)瀏覽器插件,然后用戶根據(jù)自己使用瀏覽器類型安裝不同的插件,當(dāng)然也可以都安裝上。
[0009]其次WEB應(yīng)用的WEB頁面腳本要根據(jù)瀏覽器類型實(shí)現(xiàn)不同的腳本調(diào)用不同的插件技術(shù)實(shí)現(xiàn)的插件。目前主流的WEB頁面腳本為javascript腳本語言。JavaScript —種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,并廣泛使用的一種腳本語言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動態(tài)功能。目前所有的瀏覽器都支持JavaScript腳本。JavaScript腳本存在一個問題,就是不允許跨域訪問。但是html的〈script〉標(biāo)簽的SRC屬性是可以跨域鏈接的。通過這個特性可以讓〈script〉執(zhí)行一個跨域腳本。
[0010]現(xiàn)有WEB頁面使用密碼設(shè)備的方法均有以下缺陷:
1、依賴瀏覽器內(nèi)核。需要針對瀏覽器內(nèi)核開發(fā)插件和相應(yīng)的腳本,由于瀏覽器內(nèi)核多樣,每種插件技術(shù)都有不小的學(xué)習(xí)和開發(fā)成本,而且瀏覽器還在不斷的發(fā)展,經(jīng)常會更新插件技術(shù),比如谷歌瀏覽器不同版本的支持的插件技術(shù)不一樣,維護(hù)成本也會比較高。
[0011]2、影響應(yīng)用系統(tǒng)的穩(wěn)定性。由于插件方法是通過加載插件來擴(kuò)展功能,插件經(jīng)常會導(dǎo)致瀏覽器不穩(wěn)定而崩潰,雖然很多瀏覽器采用多進(jìn)程方式進(jìn)行,瀏覽器雖然不會因插件崩潰了,但是瀏覽應(yīng)用的那個進(jìn)程還是會崩潰掉。
[0012]3、安全問題。插件與瀏覽器結(jié)合緊密,可以訪問瀏覽器內(nèi)部數(shù)據(jù),劫持瀏覽器功能,對所有網(wǎng)站都有影響,很容易被惡意插件利用,從而面臨很大的安全風(fēng)險。目前很多瀏覽器都在限制插件使用。
[0013]4、使用復(fù)雜。這主要體現(xiàn)在插件的安裝上,因為插件會影響瀏覽器穩(wěn)定,而且還會帶來安全隱患,所以所有瀏覽器都對插件持限制的策略,這導(dǎo)致了插件經(jīng)常安裝不成功,使用過程中各種警告提示不斷,為了通過安全攔截二安裝插件,有時候需要對瀏覽器做手動設(shè)置,對很多對瀏覽器不熟悉的用戶來說是個大麻煩。
【發(fā)明內(nèi)容】
[0014]為了解決上述的技術(shù)問題,本發(fā)明的目的是提供一種JAVASCRIPT使用密碼設(shè)備的方法,該方法為一種通用、易用的WEB頁面操作密碼設(shè)備的方法,通過WEB頁面的JavaScript腳本就可以完成對密碼設(shè)備的操作。
[0015]為了實(shí)現(xiàn)上述的第一個目的,本發(fā)明采用了以下的技術(shù)方案:
一種JAVASCRIPT使用密碼設(shè)備的方法,該方法包括以下的步驟:
1)應(yīng)用的WEB頁面JavaScript腳本通過〈script〉標(biāo)簽的SRC屬性以HTTPS協(xié)議訪問密碼設(shè)備HTTPS服務(wù),參數(shù)數(shù)據(jù)放入URL鏈接中;包括如下參數(shù):
①操作類型,指明進(jìn)行何種操作,包括初始化、密鑰生成、加密、解密和簽名中一種;
②回調(diào)的WEB頁面的javascript函數(shù)名稱;
③操作需要的參數(shù),每種操作需要的參數(shù)不一樣,需要做好約定;
2)密碼設(shè)備HTTPS服務(wù)獲取到HTTPS請求URL中的參數(shù)后,要求調(diào)用者驗證身份,身份驗證通過后根據(jù)參數(shù)求操作密碼設(shè)備;
3)操作完成后把密碼設(shè)備的操作結(jié)果通過回調(diào)WEB頁面中JavaScript函數(shù)的方式傳回;
4)應(yīng)用的WEB頁面在JavaScript回調(diào)函數(shù)中獲取到操作結(jié)果,然后根據(jù)自己的業(yè)務(wù)流程處理操作結(jié)果。
[0016]作為優(yōu)選,所述的步驟②約定好函數(shù)的參數(shù)標(biāo)準(zhǔn)為字符串或javascript對象。
[0017]作為優(yōu)選,所述的步驟③為簽名操作,需要參數(shù)指明原文和算法標(biāo)識。
[0018]進(jìn)行密碼設(shè)備操作的時候,需要相對于URL傳參來說有較大數(shù)據(jù)的交互。瀏覽器對使用URL長度有限制,不同的瀏覽器不同,最低不超過2048字節(jié),最高是7168。而密碼設(shè)備操作,如數(shù)據(jù)加密,理論上講長度是不限制。
[0019]作為進(jìn)一步改進(jìn),我們提出了參數(shù)數(shù)據(jù)緩存技術(shù),將大數(shù)據(jù)根據(jù)長度先分成多個數(shù)據(jù)段多次傳遞給密碼設(shè)備HTTPS服務(wù)進(jìn)行組合。具體方案如下: 將大數(shù)據(jù)進(jìn)行分段,每個數(shù)據(jù)段包括數(shù)據(jù)頭和數(shù)據(jù)體。其中數(shù)據(jù)頭包含數(shù)據(jù)標(biāo)識、數(shù)據(jù)段數(shù)目、數(shù)據(jù)段序號、數(shù)據(jù)體長度,時效性,其中數(shù)據(jù)標(biāo)識為GUID,具有全局唯一性,防止并發(fā)訪問時緩存數(shù)據(jù)互相干擾。其中數(shù)據(jù)體為具體數(shù)據(jù)分段后的內(nèi)容。由于整個過程既可以同步,也可以異步進(jìn)行,通過數(shù)據(jù)段數(shù)目可以知道是否接受完整,數(shù)據(jù)段序號用來以正確的順序進(jìn)行組合,數(shù)據(jù)體長度防止丟失數(shù)據(jù),時效性防止數(shù)據(jù)過期,以及根據(jù)時效性清除緩存。
[0020]分段后將數(shù)據(jù)段多次傳遞給密碼設(shè)備HTTPS服務(wù),密碼設(shè)備HTTPS服務(wù)緩存每次收到的數(shù)據(jù),然后根據(jù)數(shù)據(jù)頭的信息組裝數(shù)據(jù)。當(dāng)頁面腳本請求密碼設(shè)備操作的時候,傳遞的參數(shù)會指明數(shù)據(jù)標(biāo)識,密碼設(shè)備HTTPS服務(wù)會根據(jù)數(shù)據(jù)標(biāo)識將響應(yīng)的數(shù)據(jù)傳遞給密碼設(shè)備。
[0021]作為優(yōu)選,緩存的清除包括兩種方式:一是根據(jù)數(shù)據(jù)頭中的時效性信息進(jìn)行判斷,如果已經(jīng)到期,那么清除該數(shù)據(jù)標(biāo)識代表的數(shù)據(jù)緩存。二是有WEB頁面腳本主動調(diào)用密碼設(shè)備HTTPS服務(wù)清楚緩存服務(wù)進(jìn)行清除,可以清除指定標(biāo)識的數(shù)據(jù)緩存,也可以清除本應(yīng)用或頁面的所有緩存。
[0022]使用密碼設(shè)備一個很重要的方面就是身份認(rèn)證,只有獲得授權(quán)才能進(jìn)行使用。如果密碼設(shè)備部署在終端計算機(jī)上,可以由接入終端計算上的密碼設(shè)備的驅(qū)動程序發(fā)出用戶的授權(quán)請求,如輸入Pin碼等進(jìn)行鑒權(quán)。但是如果部署在遠(yuǎn)端的密碼設(shè)備該如何認(rèn)證身份呢?為此我們提出結(jié)合0Auth2.0協(xié)議進(jìn)行授權(quán)認(rèn)證。通過0Auth2.0協(xié)議可以讓W(xué)EB應(yīng)用使用密碼設(shè)備服務(wù)而不需要知道用戶在密碼設(shè)備服務(wù)上的身份校驗信息,如用戶名密碼。這樣密碼設(shè)備HTTPS服務(wù)就獨(dú)立于WEB應(yīng)用,可以為多個WEB應(yīng)用提供服務(wù),而不用將密碼設(shè)備HTTPS服務(wù)的用戶身份校驗信息共享給每個WEB應(yīng)用,保證了私密性和安全性。通過這種方式,本發(fā)明就可以實(shí)現(xiàn)安全的身份驗證。
[0023]本技術(shù)方案的優(yōu)點(diǎn)是:
1、免除瀏覽器插件。避免了因瀏覽器插件問題引起的瀏覽器不穩(wěn)定,安全性等問題;
2、跨平臺。通信機(jī)制是利用了HTML標(biāo)準(zhǔn)的〈script〉標(biāo)簽SRC屬性的開放性,是所有瀏覽器都支持的基礎(chǔ)功能,所以不依賴于瀏覽器內(nèi)核,根據(jù)瀏覽器的定義,只要是瀏覽器應(yīng)該都支持此功能,也不用擔(dān)心瀏覽器升級導(dǎo)致更新的問題;
3、部署靈活。通過本方法,密碼設(shè)備既可以部署在遠(yuǎn)程計算機(jī)上,提供公共密碼計算服務(wù),擴(kuò)展后可實(shí)現(xiàn)密碼計算云服務(wù);也可以部署在終端計算機(jī)上,為終端用戶的小型密碼設(shè)備(如智能卡鑰匙、USBKey等)提供終端密碼計算服務(wù);
4、安全性。在本方案中密碼設(shè)備HTTPS服務(wù)是獨(dú)立于瀏覽器的一個服務(wù)程序,它不會也不能訪問瀏覽器的數(shù)據(jù),不同通過瀏覽器對所有頁面施加影響,只有頁面用腳本調(diào)用才能起作用,解決了插件的安全性問題。同時密碼設(shè)備HTTPS服務(wù)與插件的通訊采用HTTPS加密傳輸,保證了通訊的安全性;
5、方便性。只需要一套腳本語言代碼,就可以在各種瀏覽器上使用,降低了系統(tǒng)的復(fù)雜度,增強(qiáng)了系統(tǒng)的穩(wěn)定性;
6、支持超長數(shù)據(jù)。操作的數(shù)據(jù)對象