天天看點

使用USB Key(加密狗)實作身份認證

首先你需要去買一個加密狗裝置,加密狗是外形酷似U盤的一種硬體裝置! 這裡我使用的堅石誠信公司的ET99産品

公司項目需要實作一個功能,就是客戶使用加密狗登入, 客戶不想輸入任何密碼之類的東西,隻需要插上類似U盤的加密狗就驗證身份登入! (當然如果U盤掉了,也就不安全了哦), 當時這個配置設定給我的時候,就給了我個ET99裝置(類似于U盤那東西),和官方網站! 去官方下載下傳資料(API & DEMO & DOC ),當時我自己心裡也沒有底,隻有先試試吧! 正好今天“試”出來了,和大家分享一下!

ET99的安全性:

  1. 登入使用者必須先輸入自己的USER PIN進行驗證後才有權限完成計算。
  2. USER PIN有最大重試次數限制,連續輸入錯誤會鎖死。進而防止硬體丢失後,被不合法的使用者反複重試。
  3. 存儲在ET99多功能鎖中的密鑰不能被任何人擷取。
  4. 使用者登入時必須具備硬體和保護硬體的USER PIN雙重因子時才能登入。有硬體,不知道USER PIN或者知道USER PIN,沒有硬體,都是沒有辦法登入的。比傳統的使用者名和密碼方式大大增加的登入使用者的安全性。(類似于銀行的U盾)
  5. 保障了系統開發商的利益。使用硬體登入,不存在使用者名密碼共享的問題

ET99的認證方式

在整個認證過程中,ET99采用沖擊響應的認證方式。當需要在網絡上驗證使用者身份時,先由用戶端向伺服器發出一個驗證請求。伺服器接到此請求後生成一個随機數并通過網絡傳輸給用戶端(此為沖擊)。用戶端将收到的随機數提供給ET99,由ET99使用該随機數與存儲在ET99中的密鑰進行HMAC-MD5運算并得到一個結果作為認證證據傳給伺服器(此為響應)。與此同時,伺服器也使用該随機數與存儲在伺服器資料庫中的該客戶密鑰進行HMAC-MD5運算,如果伺服器的運算結果與用戶端傳回的響應結果相同,則認為用戶端是一個合法使用者。

使用USB Key(加密狗)實作身份認證

如何開始:

1、在運作ET99全功能Active控件和ET99網頁安全Active控件之前,請把FT_ET99_API.dll、ET99_MOD.dll和ET99_FULL.dll拷貝到系統目錄下(一般位于windows系統中的system32目錄下),然後注冊全功能Active控件和網頁Active控件,指令行指令如下:regsvr32 ET99_MOD.dll和 regsvr32 ET99_FULL.dll.

2. 初始化裝置:

使用USB Key(加密狗)實作身份認證
使用USB Key(加密狗)實作身份認證
使用USB Key(加密狗)實作身份認證

到這一步還沒有結束呢 , 我操作的時候就以為結束了,部署官方的et99_sample_csharp_bs示例程式 , 怎麼也登入不進去! 因為這裡還沒有寫入Key!

使用USB Key(加密狗)實作身份認證

而就是寫入Key到資料庫和ET99裝置中這裡需要我們來開發! (之前不清楚AspInit幹什麼,一頭霧水)!

1. 實作AspInit頁面功能, 把key和使用者名寫入到ET99和資料庫中

使用USB Key(加密狗)實作身份認證

2.第一步實作了就可以去登入試試了

使用USB Key(加密狗)實作身份認證

3. 前面不是說PIN為16位嗎? 怎麼這裡你才輸入4位呢? 這樣的話,那個客戶願意記住16位的PIN呢? 就需要自己寫個修改PIN頁面了! 第一次修改的時候,你還得輸入16位PIN碼,以後就不用了!

使用USB Key(加密狗)實作身份認證
4. 現在總是大功告成了吧,還沒呢?不是說要自動登入嗎?怎麼還要我點選登入呢?這個這個,好像不行吧!其他網站也是隻有記住使用者名和密碼啊?好像還是需要去點選一下登入按鈕吧! 老大說: "就先這樣吧!"。還好今天早上,突然想到了思路, 使用者第一次成功登入後,把PID,PIN寫入Cookie裡面,當下次登入的時候直接在Cookie裡面擷取,在使用JS調用登入按鈕的click()事件即可! 可是很多人說cookie不安全啊,呵呵,就算别人擷取到cookie裡面的值又想怎麼, ET99裝置他總沒有! 必須擁有PID+PIN+ET99裝置才可以成功登入! 有個小插曲,做自動登入的時候,因為onload事件調用登入按鈕的click()事件形成了死循環,一直在onload一直在click()!最後在前台JS聲明個count計數變量,背景登入成功之後在把count值修改一下即可! 到此基本結束!       
結語:      
這一周基本都在做這個!其中也遇到過很多錯誤! 很感謝http://www.cnblogs.com/novawu/archive/2010/02/05/1664444.html這位大哥寫的ET99Tools,個人覺得比官方的還好!特别是異常處理那塊!(當然我程式中異常處理也是直接copy他的代碼過去 ET99_API.cs), 官方的文檔也要仔細的看,當時我就是由于走馬觀的看了看,程式抛出的異常都不知道什麼情況,比如執行有些函數必須的前置條件,結果前置條件都沒有執行,當然程式會出錯! 另:winform程式是引用ET99_MOD.dll,而asp.net程式則是引用ET99_FULL.dll,之前也是DLL引用錯了,一直在錯!      
源程式+官方資料+ET99Tools(上面連結哪位仁兄寫的)下載下傳      

繼續閱讀