前一篇介紹了證書系統(tǒng)和與系統(tǒng)的接口,那么有了接口證書如何在不同系統(tǒng)中使用是過去幾年公司重點(diǎn)在研究和探索的內(nèi)容,證書的應(yīng)用場景我之前也做過相應(yīng)的介紹,在這里詳細(xì)講解下使用證書進(jìn)行身份認(rèn)證。
身份認(rèn)證的一般流程
使用口令認(rèn)證的流程是:用戶注冊,系統(tǒng)保存賬戶和密碼,用戶用注冊的名稱和密碼登錄,系統(tǒng)判斷登錄的賬戶和密碼是否正確,在系統(tǒng)中有那些權(quán)限,用戶登錄成功進(jìn)入首頁。
使用證書認(rèn)證接口:后客戶端的步驟,瀏覽器加載插件,插件調(diào)取u盾接口獲取證書信息,通過js展現(xiàn)在頁面上,用戶選擇自己的證書點(diǎn)擊登錄輸入u盾pin碼,js將pin碼以及待簽名原文這里是服務(wù)的產(chǎn)生的隨機(jī)數(shù)通過session傳到前端,u盾通過pin碼獲取到密鑰使用權(quán)限對隨機(jī)數(shù)簽名返回插件,插件通過js調(diào)用返回服務(wù)端,這樣客戶端調(diào)用證書登錄過程完畢,接下來是服務(wù)端調(diào)用過程。
服務(wù)端驗(yàn)證過程,服務(wù)端加載了證書驗(yàn)證的接口包。在驗(yàn)證流程中獲取從瀏覽器傳來的簽名結(jié)果,從session中獲取到本次登錄使用的隨機(jī)數(shù),然后進(jìn)行證書簽名驗(yàn)證,驗(yàn)證過程包括簽名驗(yàn)證,證書頒發(fā)機(jī)構(gòu)驗(yàn)證,證書有效期驗(yàn)證,證書是否吊銷驗(yàn)證,驗(yàn)證沒有問題后從簽名結(jié)果中獲取到證書,再解析證書主題得到存放在證書主題中的用戶信息,之后就可以通過與保存在系統(tǒng)中的權(quán)限信息進(jìn)行匹配,假如匹配成功則返回成功用戶進(jìn)入首頁。
在實(shí)踐中如何應(yīng)用
集成方式
接口集成
這種方式是產(chǎn)品最初期的形態(tài),也就是說每談一次新客戶,客戶有新系統(tǒng),就要與系統(tǒng)集成一次,然后收取一次集成費(fèi)用以及接口費(fèi)用,而且由于系統(tǒng)的語言以及開發(fā)人員的水平不同,實(shí)施難度不同。不像現(xiàn)在云平臺(tái)的興起,業(yè)務(wù)開發(fā)人員對api的理解越來越高。那時(shí)需要現(xiàn)場培訓(xùn)交流,甚至直接在業(yè)務(wù)系統(tǒng)里面嵌入代碼,雖然接口已經(jīng)封裝的足夠簡單。所以后來的思路一方面是接口文檔的規(guī)范化和demo的標(biāo)準(zhǔn)化,一方面是與流行業(yè)務(wù)系統(tǒng)的提前整合這樣證書功能就變成業(yè)務(wù)系統(tǒng)的一個(gè)功能模塊了。
接口預(yù)埋
與業(yè)務(wù)系統(tǒng)進(jìn)行深度集成綁定是證書應(yīng)用的最好的方式,但是后期維護(hù)的成本也比較高,只要業(yè)務(wù)系統(tǒng)版本升級就需要不斷跟隨測試。比如和某oa系統(tǒng)集成,oa系統(tǒng)采用比較規(guī)范的mvc架構(gòu),在使用外部接口的時(shí)候,它首先會(huì)封裝出來一些接口出來,然后我們再去實(shí)現(xiàn)這些接口,如何調(diào)用這些接口,會(huì)參考我們的demo。這樣弄下來雙方都需要開發(fā),不過耦合度就比較高,對于戰(zhàn)略合作伙伴來說不失為一種好方式。
U盾集成
1.要檢查u盾的插入拔出狀態(tài),這樣可以防止u盾的擁有者不在電腦旁但u盾插入時(shí)被別人非法操作
2.u盾的管理,這里要能夠管理u盾的pin碼,當(dāng)密碼忘記時(shí)要安全的重置。
3.u盾的定制,定制主要看客戶的需求,比如外觀的選擇,logo的印刷,驅(qū)動(dòng)定制等。有種特殊的情況是廠商的key已經(jīng)在機(jī)器上安裝過驅(qū)動(dòng)了,假如再插入一個(gè)新的設(shè)備那么就會(huì)出現(xiàn)識(shí)別不出來或者個(gè)別功能失效的問題,這時(shí)就需要對驅(qū)動(dòng)進(jìn)行唯一化定制。
配置模式
以上兩種針對國內(nèi)的軟件是有效的因?yàn)槎际亲约洪_發(fā)的,針對國外的軟件比如微軟或者ibm的軟件或者一些硬件設(shè)備,由于沒法修改的,基本都是以配置為主。假如該軟件沒有證書認(rèn)證功能那就基本沒戲了,不過目前為止還沒有軟件是不支持的,下面介紹下通過配置方式來進(jìn)行證書身份認(rèn)證:
微軟配置
微軟的官方文檔里面有講解如何進(jìn)行智能卡域登錄的,它的后臺(tái)認(rèn)證協(xié)議采用自己的kebero協(xié)議,這里不對協(xié)議進(jìn)行介紹,也不用它自己的ca進(jìn)行配置,而是使用第三方ca來進(jìn)行身份認(rèn)證。簡單說來只需要三步:
第一步導(dǎo)入ca的信任體系到域控制器的ca證書存儲(chǔ)相應(yīng)的位置,同時(shí)也要把信任體系產(chǎn)生的吊銷列表也導(dǎo)入;
第二步將信任體系導(dǎo)入要采用智能卡認(rèn)證的組策略中;
第三步打開組策略中的智能卡認(rèn)證方式同時(shí)進(jìn)行下發(fā),之后刷新組策略注銷重新登錄就可以進(jìn)行認(rèn)證了。該步驟也是經(jīng)過多次嘗試后才可以使用。其中需要注意的是證書主題項(xiàng)dn值要與域控中的組信息和個(gè)人信息匹配,否則由于找不到該用戶也會(huì)出現(xiàn)錯(cuò)誤提示。
一般軟硬件配置
按照經(jīng)驗(yàn)來看ibm的軟件、國外的設(shè)備如f5,web中間件如tomcat和apache,國內(nèi)的設(shè)備如vpn等都是采用文件或者界面配置的方式。
第一步是啟用ssl端口443或者8443,根據(jù)需要打開單向認(rèn)證或雙向認(rèn)證,單向意思是客戶端認(rèn)證服務(wù)端身份而雙向是客戶端和服務(wù)端雙方都要認(rèn)證對方身份。身份的標(biāo)識(shí)就是數(shù)字證書,下面就會(huì)配置服務(wù)器證書和客戶端證書。
第二步制作jks文件或keystore文件,這里主要是把證書信任鏈導(dǎo)入以及正確產(chǎn)生和導(dǎo)入服務(wù)器證書。這里不再詳述會(huì)在后續(xù)的文章中詳述。在配置文件或者界面中指定正確的文件后就可以重啟服務(wù)了。
第三步用戶權(quán)限配置,這里不同的設(shè)備是不一樣的,比如ibm的系統(tǒng)會(huì)有專門的服務(wù)將證書與個(gè)人賬戶信息綁定,而在國內(nèi)的vpn中會(huì)事先建立權(quán)限組進(jìn)行之后再進(jìn)行綁定。一些服務(wù)就要配合目錄服務(wù)來統(tǒng)一管理用戶權(quán)限了。
第四步在客戶端使用u盾重新登錄進(jìn)行測試。在瀏覽器的效果是會(huì)彈出對話框選擇要登錄的證書,假如能夠彈出u盾中的個(gè)人證書選擇后進(jìn)入系統(tǒng)顯示個(gè)人信息則整個(gè)部署過程就完成了。
結(jié)論
使用證書進(jìn)行身份認(rèn)證,是一個(gè)不斷積累的過程,各軟件廠商在證書認(rèn)證這塊還沒有完全統(tǒng)一,各家在實(shí)現(xiàn)中也會(huì)多少有點(diǎn)差別,但是基本原理是一致的,只有不斷實(shí)踐和總結(jié),對于ca廠商來說才會(huì)擁有更好的服務(wù)口碑。