◆陳 超
?
基于公鑰體制的CA平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
◆陳 超
(江蘇建筑職業(yè)技術(shù)學(xué)院信息傳媒與藝術(shù)學(xué)院 江蘇 221116)
本文基于公鑰體制的CA平臺(tái)設(shè)計(jì)與實(shí)現(xiàn),設(shè)計(jì)一個(gè)具有申請(qǐng)證書、簽發(fā)證書、作廢證書、密鑰管理的數(shù)字認(rèn)證平臺(tái)。主要的目標(biāo)是通過本文的設(shè)計(jì),具體闡述數(shù)字證書的簽發(fā)流程、數(shù)據(jù)結(jié)構(gòu)、簽發(fā)算法、非對(duì)稱密鑰具體實(shí)現(xiàn)過程,證書作廢的關(guān)鍵技術(shù)、安全協(xié)議的實(shí)現(xiàn)方法、非對(duì)稱密鑰加密解密的方法和管理。課題最終目的是開發(fā)一個(gè)基于SSL協(xié)議的數(shù)字認(rèn)證平臺(tái),實(shí)現(xiàn)申請(qǐng)數(shù)字證書、簽發(fā)證書、更新證書、作廢證書和密鑰管理的功能;實(shí)現(xiàn)數(shù)據(jù)在安全信道中傳輸。
公鑰體制;CA;SSL協(xié)議
CA是數(shù)字證書認(rèn)證中心的簡(jiǎn)稱,是一個(gè)需要被客戶信任的權(quán)威簽發(fā)機(jī)構(gòu),信任CA的機(jī)構(gòu)對(duì)CA所認(rèn)證的實(shí)體也是無條件信任的。21世紀(jì)作為信息時(shí)代,作為大數(shù)據(jù)時(shí)代,網(wǎng)絡(luò)安全、信息安全和數(shù)據(jù)的安全傳輸?shù)氖切畔r(shí)代和大數(shù)據(jù)時(shí)代的基本保障。數(shù)字證書是作為實(shí)現(xiàn)網(wǎng)絡(luò)安全和保護(hù)數(shù)據(jù)資料在網(wǎng)絡(luò)安全傳輸?shù)幕竟ぞ?,?duì)其數(shù)據(jù)結(jié)構(gòu),簽發(fā)流程,簽發(fā)算法以及簽發(fā)機(jī)構(gòu)證書進(jìn)行深入研究。
電子商務(wù)正在蓬勃的發(fā)展,電子支付是電子商務(wù)的核心的技術(shù),保障電子支付安全的手段之一是SSL ,數(shù)字證書為SSL協(xié)議的核心技術(shù)。對(duì)CA平臺(tái)的模擬,對(duì)網(wǎng)絡(luò)安全和數(shù)據(jù)傳輸安全的學(xué)習(xí)和研究,符合電子商務(wù)發(fā)展的要求,符合計(jì)算機(jī)科學(xué)與技術(shù)現(xiàn)在社會(huì)的發(fā)展趨勢(shì)。
對(duì)數(shù)字認(rèn)證平臺(tái)的模擬實(shí)現(xiàn)能夠深層次地剖析數(shù)字認(rèn)證的流程、能夠了解數(shù)字認(rèn)證的核心技術(shù)、在模擬的過程中也能對(duì)數(shù)字認(rèn)證現(xiàn)在的發(fā)展趨勢(shì)以及發(fā)展模式有較好的認(rèn)識(shí)。本文最終成果為設(shè)計(jì)開發(fā)一個(gè)具備基本功能的數(shù)字認(rèn)證中心的網(wǎng)站,具有前臺(tái)后臺(tái)的管理,能夠模擬實(shí)現(xiàn)數(shù)字認(rèn)證的基本功能。
需求分析能夠讓我們?cè)谄脚_(tái)設(shè)計(jì)之前了解平臺(tái)架構(gòu),更好服務(wù)于進(jìn)一步設(shè)計(jì)與實(shí)現(xiàn)工作,以下以數(shù)據(jù)流圖為主線,介紹需求。
實(shí)現(xiàn)數(shù)據(jù)認(rèn)證中心的主要流程如圖1,用戶發(fā)出證書申請(qǐng)或者證書作廢申請(qǐng),數(shù)字認(rèn)證中心管理員收到用戶的申請(qǐng)后,通過審核,發(fā)出簽發(fā)命令或者撤銷命令,然后用戶從數(shù)字認(rèn)證中心下載數(shù)字證書或者已作廢的證書。
圖1 頂層數(shù)據(jù)流圖
如圖2,數(shù)字認(rèn)證中心的主要功能可以分為前臺(tái)申請(qǐng)和后臺(tái)審核,用戶在數(shù)字認(rèn)證中心的門戶網(wǎng)站上提出申請(qǐng),數(shù)字認(rèn)證中心將用戶的申請(qǐng)存儲(chǔ)在證書狀態(tài)表里;管理員可以通過后臺(tái)審核系統(tǒng)得到用戶申請(qǐng),管理員通過審核后可以發(fā)出簽發(fā)命令或者撤銷命令,數(shù)字認(rèn)證中心接受管理員命令有生成數(shù)字證書與密鑰文件,系統(tǒng)更新證書狀態(tài)表,將作廢證書信息存入作廢證書表;用戶可以獲得數(shù)字證書與證書吊銷列表。
圖2 0層數(shù)據(jù)流圖
如圖3,用戶通過用戶權(quán)限管理進(jìn)行注冊(cè)申請(qǐng),把用戶信息存入用戶權(quán)限表;用戶查詢證書相關(guān)信息時(shí),系統(tǒng)根據(jù)用戶權(quán)限表和用戶的請(qǐng)求與權(quán)限,讀取系統(tǒng)的作廢證書表與證書狀態(tài)表,把相應(yīng)的信息反饋給用戶。
圖3 申請(qǐng)系統(tǒng)數(shù)據(jù)流圖
圖4 審核系統(tǒng)數(shù)據(jù)流圖
總體設(shè)計(jì)的階段將系統(tǒng)需求細(xì)化成一個(gè)個(gè)的功能模塊,整個(gè)數(shù)字認(rèn)證中心分為用戶模塊和管理員模塊。
通過對(duì)數(shù)字認(rèn)證系統(tǒng)的需求分析,可以將基于公鑰體制的CA平臺(tái)功能模塊劃分為用戶模塊和管理員模塊。
(1)證書申請(qǐng)模塊
用戶可以申請(qǐng)個(gè)人數(shù)字證書、安全郵箱證書和安全站點(diǎn)證書,在申請(qǐng)過程中需要填寫申請(qǐng)信息。
(2)證書查詢模塊
用戶可以查詢個(gè)人數(shù)字證書、安全郵箱證書、安全站點(diǎn)證書信息,并且可以根據(jù)每種數(shù)字證書的特點(diǎn)按不同的條件查詢證書。對(duì)于個(gè)人數(shù)字證書,可以根據(jù)證書持有者人的姓名、郵箱、身份證號(hào)碼以及證書的序列號(hào)查詢;對(duì)于安全郵箱證書,可以根據(jù)安全郵箱的地址、申請(qǐng)人的姓名、身份證號(hào)以及證書的序列號(hào)查詢;對(duì)于安全站點(diǎn)證書,可以根據(jù)服務(wù)器的域名以及證書的序列號(hào)查詢。
(3)根證書下載模塊
要使用該數(shù)字認(rèn)證平臺(tái)簽發(fā)的證書,必須先下載該證書認(rèn)證中心的根證書。
用戶個(gè)人信息模塊:在用戶個(gè)人信息模塊中,提供注冊(cè)和找回密碼的功能;還可以修改該用戶已發(fā)出數(shù)字證書簽發(fā)的申請(qǐng),或者撤銷申請(qǐng);用戶可以更新已經(jīng)簽發(fā)的證書,包括延長(zhǎng)證書的使用時(shí)期和作廢已經(jīng)簽發(fā)的證書;用戶可以下載證書對(duì)應(yīng)的密鑰和修改已簽發(fā)證書的密鑰密令。
查詢證書作廢模塊:在查詢證書作廢模塊中,用戶可以查詢作廢證書的信息和下載數(shù)字認(rèn)證中心所簽發(fā)的證書吊銷文件。
管理員模塊功能描述如下:
(1)簽發(fā)證書模塊
在證書簽發(fā)模塊中,管理員可以簽發(fā)數(shù)字證書,包括生成數(shù)字證書密鑰、生產(chǎn)數(shù)字證書公鑰、簽發(fā)數(shù)字證書。
(2)更新證書模塊
在更新證書模塊中,管理員可以續(xù)期證書和作廢證書。續(xù)期證書只需要對(duì)用戶的公鑰重新簽名就可以了;對(duì)于作廢證書,需要把證書信息發(fā)布到系統(tǒng)前臺(tái)和簽發(fā)證書作廢列表文件,并固改時(shí)間更新用戶下載的證書作廢列表文件。
(3)密鑰管理模塊
在密鑰管理系統(tǒng)中,管理員根據(jù)用戶的申請(qǐng)可以修改密鑰密令。管理員要進(jìn)入后臺(tái)管理系統(tǒng),先經(jīng)過管理員權(quán)限審核,管理員的信息存儲(chǔ)在管理權(quán)限表里;管理員看到用戶的請(qǐng)求后,系統(tǒng)讀取證書狀態(tài)表,管理員發(fā)出簽發(fā)信息,系統(tǒng)將證書信息發(fā)到前臺(tái);用戶收到用戶作廢請(qǐng)求后,打出作廢命令,系統(tǒng)將信息存儲(chǔ)到作廢表中,并將作廢證書信息發(fā)到前臺(tái)。
(1)注冊(cè)
用戶申請(qǐng)需填寫相關(guān)信息,如姓名,電子郵箱,性別,密碼,確認(rèn)密碼等??紤]到本系統(tǒng)的會(huì)有外國(guó)人,會(huì)有中間名的情況,注冊(cè)信息中包含了中間名,但其并非是必填項(xiàng)。
(2)用戶登錄及忘記密碼
對(duì)于已經(jīng)注冊(cè)過的申請(qǐng)人,可以直接進(jìn)行登錄操作。即填寫注冊(cè)時(shí)所用電子郵箱、密碼及當(dāng)前頁(yè)刷新出的驗(yàn)證碼,通過驗(yàn)證后即可進(jìn)行申請(qǐng)研究生的下一步環(huán)節(jié)。
(3)基本信息錄入
用戶需要錄入大量信息,其中,包括基礎(chǔ)信息、家庭信息、受教育信息、工作經(jīng)驗(yàn)、和語(yǔ)言能力。
在設(shè)計(jì)與開發(fā)基于公鑰體制的CA平臺(tái)時(shí),首先應(yīng)該實(shí)現(xiàn)的功能是數(shù)據(jù)的安全傳輸。為實(shí)現(xiàn)數(shù)據(jù)的安全傳輸首先應(yīng)該實(shí)現(xiàn)SSL鏈接。
(1)安裝證書
為建立SSL鏈接,首先需要一個(gè)數(shù)字證書,這里直接使用利用keytool生成的自簽名的證書,其CN=www.tieshan.com,默認(rèn)CN選項(xiàng)應(yīng)該與域名想對(duì)應(yīng)。
(2)域名綁定
由于我們證書的CN=www.tieshan.com,在使用本地服務(wù)器時(shí),需要將域名www.tieshan.com綁定到本地主機(jī)上,在Windows中打開hosts文件,在電腦的C:WINDOWSsystem32driversetc路徑下,如綁定成功打開命令提示符,輸入ping www.tieshan.com的命令,命令執(zhí)行成功,將會(huì)看到看到如圖5所示。
圖 5 命令提示符ping www.tieshan.com命令截圖
綁定域名之后輸入地址www.tieshan.com:8433之后將正常顯示Tomcat服務(wù)器的主頁(yè)面信息,如圖6所示。
圖6 綁定域名后瀏覽器顯示截圖
(3)配置服務(wù)器
建立SSL鏈接,需要將證書信息配置到Tomcat服務(wù)器安裝目錄下的server.xml文件,在我的電腦里D: omcatconf目錄下。其配置代碼如下所示:
;
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" keystoreFile="E:caca.keystore" keystorePass="123456" sslProtocol="SSL" /> (4)建立SSL鏈接 重新啟動(dòng)Tomcat服務(wù)器,打開谷歌瀏覽器,在地址欄里輸入https://www.tieshan.com:8443/,就可以建立安全鏈接了。 雖然keytool可以直接生成密鑰與自簽名證書,但我們不僅僅是為了生成密鑰與證書,而要把生成密鑰與自簽名的證書的功能融入到系統(tǒng)中,在生成證書的時(shí)候,需要查詢用戶的申請(qǐng),然后手動(dòng)的輸入命令提示符命令式不合理的,所以需要設(shè)計(jì)一個(gè)可以自動(dòng)生成密鑰與自簽名證書的代碼。 (1)實(shí)現(xiàn)系統(tǒng)調(diào)用 為了能夠利用Java代碼生成密鑰與數(shù)字證書,必須能夠用Java代碼調(diào)用keytool工具,而keytool并沒有提供能直接被Java調(diào)用的接口。但keytool工具可以再命令提示符下利用doc命令執(zhí)行,而Java語(yǔ)言提供了調(diào)用命令提示符的方法。我們可以通過調(diào)用命令提示符來實(shí)現(xiàn)Java代碼控制keytool的目的。 (2)生成密鑰 首先,我們把生成密鑰與證書的代碼放在一個(gè)ExportCertFormKeystore類里,生成密鑰與證書為這個(gè)類的成員方法。我們需要先設(shè)計(jì)一個(gè)方法execCommand(String[] arstringCommand),可以實(shí)現(xiàn)系統(tǒng)調(diào)用的命令。 其次我們需要利用execCommand(String[] arstringCommand)實(shí)現(xiàn)系統(tǒng)調(diào)用keytool工具,設(shè)計(jì)一個(gè)生成密鑰的方法genkey(int years,String alias,String storefile,String dname,String keypassword)。 (3)生成證書 生成密鑰之后,就要根據(jù)密鑰的信息,通過系統(tǒng)調(diào)用,使用execCommand(String[] arstringCommand)調(diào)用keytool工具,實(shí)現(xiàn)生成證書文件的功能,設(shè)計(jì)一個(gè)生成證書方法為gencert(String storefile,String alias,String certfile,String keypassword)其中參數(shù)含義分別是證書的密鑰文件路徑,證書別名,證書的文件路徑,證書的密鑰密令。 keytool工具只有生成密鑰和自簽名證書的方法,并不能簽發(fā)證書,而要實(shí)現(xiàn)證書的簽發(fā)必須利用java語(yǔ)言提供的有關(guān)security的包,這里詳細(xì)解析一下簽發(fā)證書的代碼。 首先,導(dǎo)入需要應(yīng)用的到j(luò)ar包。我們把簽發(fā)證書的方法放在一個(gè)SignCert的類里。 3.3.1簽發(fā)流程 圖7 證書簽發(fā)程序流程圖 如圖7所示,證書簽發(fā)內(nèi)容在方法Sign(),簽發(fā)證書的流程為:首先使用getSignCertInfo()獲取根證書信息;然后用signCertificate()簽發(fā)代簽名的數(shù)字證書;最后使用createNewCertificate()創(chuàng)建和保存簽名證書的信息。 3.3.2獲取簽名證書 使用getSignCertInfo()獲取簽名信息,如圖8所示。 其實(shí)現(xiàn)流程為: (1)定義一個(gè)名為 vFin文件流FileInputStream將根證書的密鑰文件keystore進(jìn)行讀?。?/p> (2)利用密鑰文件的keystore的密令將vFin文件流用用keystore類的成員方法keystore.load(FileInputStream,Stirng)獲取密鑰庫(kù)的信息; (3)然后將密鑰庫(kù)信息轉(zhuǎn)換成X509CertInfo的信息,并將密鑰庫(kù)中的私鑰密鑰提取出來保存。 圖8 獲取簽名證書信息 3.3.3簽發(fā)數(shù)字證書 圖9 簽發(fā)數(shù)字證書程序流程圖 簽發(fā)證書的流程為: (1)從keytool生成的cer自簽名證書中獲取被簽名證書信息; (2)將證書轉(zhuǎn)換可以識(shí)別的X.509形式; (3)利用證書類的set方法設(shè)置被簽名證書的設(shè)置有效日期、序列號(hào)、簽名者、數(shù)字簽名算法。 然后將證書類保存到指定的文件中去,就實(shí)現(xiàn)了簽發(fā)證書的算法,在基于公鑰體制的CA平臺(tái)設(shè)計(jì)與開發(fā)過程中,把簽發(fā)算法放到Struts2的Action類中,管理員可以通過讀取用戶的申請(qǐng),自行設(shè)置證書的主體信息。 在生成作廢列表中,僅僅用到j(luò)dk中的包是遠(yuǎn)遠(yuǎn)不夠的,生成作廢列表應(yīng)該是系統(tǒng)重點(diǎn)難點(diǎn),不僅需要對(duì)證書作廢列表的數(shù)據(jù)結(jié)構(gòu)和編碼有所了解,更需要熟悉Bouncy Castle 類。 3.4.1生成證書作廢列表的流程 (1)根據(jù)keytool生成的keystore文件獲取私鑰與公鑰; (2)將當(dāng)前時(shí)間設(shè)置為證書作廢時(shí)間; (3)將作廢證書的序列號(hào)導(dǎo)入證書作廢列表中; (4)用keystore文件里證書簽發(fā)者的信息對(duì)證書作廢文件進(jìn)行簽名; (5)設(shè)置證書作廢的原因; (6)將證書作廢列表的信息編碼保存到crl文件里。 3.4.2更新證書作廢列表crl文件 更新證書作廢列表即把新的作廢證書的序列號(hào)以及作廢原因?qū)氲阶C書作廢列表文件crl中,理論上一個(gè)數(shù)字認(rèn)證中心對(duì)外發(fā)布一個(gè)最新證書作廢列表供用戶下載就行了。更新證書作廢列表crl文件流程如下: (1)根據(jù)keytool生成的keystore文件讀取根證書的密鑰與證書信息; (2)根據(jù)根證書的密鑰里的私鑰讀取crl文件信息; (3)生成一個(gè)空值的證書作廢條目; (4)將當(dāng)前時(shí)間設(shè)置為證書作廢時(shí)間; (5)將作廢證書的序列號(hào)導(dǎo)入證書作廢列表中; (6)設(shè)置證書作廢的原因; (7)將證書作廢列表的信息編碼保存到crl文件里。 3.5.1 密鑰校驗(yàn) 密鑰校驗(yàn)過程主要流程為: (1)首先輸入用于校驗(yàn)一個(gè)字符串; (2)將這個(gè)字符用getBytes("GBK")取得該字符的GBK編碼; (3)用事先定義的方法從密鑰文件中讀取私鑰信息; (4)對(duì)該字符串的GBK編碼用私鑰進(jìn)行加密; (5)將加密的GBK編碼,采用String(GBK)的格式輸出; (6)讀取對(duì)應(yīng)證書的公鑰信息; (7)用公鑰對(duì)私鑰加密后的GBK編碼進(jìn)行解密; (8)將解密后的編碼,采用String(GBK)格式輸出。 我們比較加密前后的String是否相同就可以校驗(yàn)私鑰加密公鑰解密的過程。 3.5.2修改密鑰密令 修改密鑰文件keystore的密鑰密令可以通過java.security.cert包直接keystore.load( )和keystore.store( )實(shí)現(xiàn)。 本文主要闡述了完成一個(gè)功能完整數(shù)字認(rèn)證系統(tǒng)的設(shè)計(jì),完成了具有證書申請(qǐng)、證書簽發(fā)、證書更新、證書查詢、證書作廢,密鑰管理、證書作廢功能的數(shù)字認(rèn)證系統(tǒng)。數(shù)字認(rèn)證系統(tǒng)是一個(gè)關(guān)乎網(wǎng)絡(luò)安全的核心系統(tǒng),網(wǎng)絡(luò)安全在日常的商用領(lǐng)域,關(guān)系到每個(gè)網(wǎng)名的的切身利益;在軍事領(lǐng)域,尤其是現(xiàn)在信息技術(shù)用戶軍事領(lǐng)域的,高科技軍事時(shí)代,網(wǎng)絡(luò)安全問題關(guān)系到一個(gè)國(guó)家的命運(yùn)。雖然現(xiàn)在只是初步的模擬數(shù)字認(rèn)證系統(tǒng)的基本功能,但相信當(dāng)擁有了自己的開發(fā)團(tuán)隊(duì),具有一定的開發(fā)的所需要物質(zhì)基礎(chǔ),必定能為國(guó)家的網(wǎng)絡(luò)安全作出自己的貢獻(xiàn)。 [1]梁棟.Java加密與解密的藝術(shù)[M].北京:機(jī)械工業(yè)出版社,2010. [2]薛天龍.數(shù)字證書原理以及應(yīng)用方法指南[M].北京:中國(guó)標(biāo)準(zhǔn)出版社,2014. [3]陳路. 基于代購(gòu)網(wǎng)站多種支付的研究與實(shí)現(xiàn)[D].東華大學(xué),2014. [4]殷騰飛.DRM系統(tǒng)中PKI部分的研究與設(shè)計(jì)[D].華東理工大學(xué),2014. [5]鄭麗娟.身份與位置分離網(wǎng)絡(luò)中認(rèn)證協(xié)議的研究與設(shè)計(jì)[D].北京交通大學(xué),2014. [6]Han-Ul Jang,Heung-Kyu Lee. Biometric-PKI Authentic ation System Using Fingerprint Minutiae[J].Journal of Computer and Communications,2014. [7]柴國(guó)杰.基于數(shù)字證書認(rèn)證的IPSec VPN研究與應(yīng)用[D].山東大學(xué),2012. [8]Ian Phau,Aaron Lim,Johan Liang,Michael Lwin.Engaging in digital piracy of movies:a theory of planned behaviour approach[J].Internet Research,2014.3.2 生成密鑰與證書
3.3 簽發(fā)證書
3.4 作廢證書
3.5 密鑰管理
4 結(jié)束語(yǔ)