剛進(jìn)公司實(shí)習(xí)做實(shí)施工程師的時(shí)候彻采,領(lǐng)導(dǎo)的要求是熟練安裝公司的CA系統(tǒng)档插。當(dāng)時(shí)只給了文檔沙绝,玩客戶(hù)端很久搏明,心想安裝軟件不就是一路next最后點(diǎn)擊個(gè)完成安裝不就完了嗎?結(jié)果發(fā)現(xiàn)完全不是那么回事闪檬,當(dāng)點(diǎn)擊安裝完畢才是旅程的真正開(kāi)始熏瞄。
真正安裝好能夠發(fā)出一張用戶(hù)證書(shū)后感受是:第一是安裝的復(fù)雜度很高,按照手冊(cè)來(lái)安裝都有很大的幾率安裝不成功谬以;第二是出現(xiàn)錯(cuò)誤不知道哪里出了問(wèn)題强饮,唯一的解決辦法是打電話(huà)求助研發(fā),讓研發(fā)從開(kāi)發(fā)環(huán)境上調(diào)試到底是哪里配置不正確为黎。
后來(lái)為了深入了解CA系統(tǒng)能夠快速定位問(wèn)題邮丰,終于知道CA產(chǎn)品的各部分的作用以及相互的關(guān)系,那么我們看看當(dāng)時(shí)的CA的架構(gòu)是如何的:
CA系統(tǒng)介紹
四層架構(gòu)簡(jiǎn)述
第一層是資源層有密碼設(shè)備比如有加密機(jī)铭乾,加密卡剪廉,LDAP目錄服務(wù)器、DB數(shù)據(jù)庫(kù)
第二層是資源層的代理服務(wù)用:有加密設(shè)備代理服務(wù)炕檩、LDAP代理服務(wù)斗蒋、DB代理服務(wù)QM,這些服務(wù)將系統(tǒng)解耦笛质,使得可以對(duì)接各種類(lèi)型的服務(wù)和設(shè)備泉沾,而與上一層的服務(wù)無(wú)關(guān),適配的過(guò)程只在這一層進(jìn)行妇押。
第三層是基于C++實(shí)現(xiàn)的CA核心邏輯:有簽名服務(wù)跷究、CA服務(wù)、RA服務(wù)
第四層是業(yè)務(wù)展示層像目前MVC架構(gòu)里面的V這一層敲霍,通過(guò)web的友好可視化來(lái)實(shí)現(xiàn)證書(shū)的生命周期管理俊马,數(shù)據(jù)交互通過(guò)java與C++的橋來(lái)處理。
這個(gè)階段架構(gòu)模式是仿照國(guó)外的成熟CA機(jī)構(gòu)肩杈,這個(gè)模型靈活度高能夠適應(yīng)多種部署模式柴我,當(dāng)然太靈活的代價(jià)就是無(wú)法形成標(biāo)準(zhǔn)產(chǎn)品化程度較低。
CA系統(tǒng)的信任模型介紹
上圖描述了一個(gè)標(biāo)準(zhǔn)的CA系統(tǒng)的信任關(guān)系模型扩然。它就像一個(gè)倒著的樹(shù)艘儒,根是信任的基礎(chǔ)一般由CA機(jī)構(gòu)產(chǎn)生,下面的中級(jí)證書(shū)代表了某個(gè)客戶(hù)公司,用戶(hù)證書(shū)由中級(jí)證書(shū)簽發(fā)彤悔。從用戶(hù)的角度看自己的證書(shū)是由自己的公司簽發(fā)的,同時(shí)自己公司是由天威誠(chéng)信提供證書(shū)服務(wù)的索守,這樣的信任模式是符合組織架構(gòu)和邏輯關(guān)系的晕窑。
CA系統(tǒng)的賬戶(hù)體系介紹
賬戶(hù)體系是天威誠(chéng)信CA系統(tǒng)的核心所在,主要是在業(yè)務(wù)展現(xiàn)層中進(jìn)行配置卵佛。其過(guò)程是按照從上到下依次進(jìn)行步驟不能亂杨赤,這里是最容易出錯(cuò)的。第一步建立超級(jí)賬戶(hù)截汪、加載根證書(shū)疾牲、申請(qǐng)和下載超級(jí)管理員,第二步申請(qǐng)ESA賬戶(hù)衙解,配置ESA賬戶(hù)信息和加載根證書(shū)和中級(jí)證書(shū)阳柔,由超級(jí)管理員批準(zhǔn)后下載ESA管理員證書(shū),第三步按照上面的順序蚓峦,申請(qǐng)RA賬戶(hù)舌剂,配置RA賬戶(hù)信息和加載中級(jí)證書(shū),由ESA管理員批準(zhǔn)賬戶(hù)申請(qǐng)下載RA管理員證書(shū)暑椰,第四步下載用戶(hù)證書(shū)霍转,用戶(hù)在用戶(hù)申請(qǐng)站點(diǎn)填寫(xiě)申請(qǐng)信息,由RA管理員批準(zhǔn)后下載用戶(hù)證書(shū)到U盾中一汽。為何如此復(fù)雜避消,證書(shū)系統(tǒng)是一個(gè)高安全要求的系統(tǒng),通過(guò)層層審批召夹,可以降低風(fēng)險(xiǎn)岩喷。
證書(shū)應(yīng)用
證書(shū)頒發(fā)出來(lái)后,業(yè)務(wù)系統(tǒng)要識(shí)別證書(shū)以及符合證書(shū)的使用規(guī)范监憎,這是就需要將證書(shū)的一套接口集成到業(yè)務(wù)系統(tǒng)中才可以正常使用均驶,證書(shū)的應(yīng)用接口包括服務(wù)端和客戶(hù)端:
服務(wù)端接口
服務(wù)端的主流語(yǔ)言一般為Java和.net,偶爾會(huì)碰到c枫虏,主要提供前兩個(gè)語(yǔ)言妇穴。這里主要講講JAVA接口的構(gòu)成,java語(yǔ)言下的開(kāi)源密碼應(yīng)用接口包主要有bouncycastle和jdk自帶的jce隶债,為了通用性主要采用bouncycastle和jce結(jié)合的方式腾它,將這兩個(gè)封裝在一起提供給平臺(tái)開(kāi)發(fā)者的是比較簡(jiǎn)單易懂的接口。
客戶(hù)端接口
客戶(hù)端比較特殊死讹,使用的是BS的結(jié)構(gòu)但是要訪(fǎng)問(wèn)外設(shè)U盾瞒滴,所以通過(guò)JS調(diào)瀏覽器插件。我們就需要維護(hù)JS的代碼和插件的代碼。一開(kāi)始的時(shí)候產(chǎn)品還有一部分VBscript的代碼妓忍,后來(lái)逐漸過(guò)渡到全部使用Javascript虏两。js代碼主要處理頁(yè)面數(shù)據(jù)與后臺(tái)數(shù)據(jù)的交互、頁(yè)面的展現(xiàn)世剖、頁(yè)面數(shù)據(jù)與插件的數(shù)據(jù)交互定罢。這個(gè)版本插件是由activeX框架組成,其中密碼相關(guān)功能采用微軟自帶的庫(kù)cryptoAPI旁瘫。