專利名稱:一種x509數(shù)字證書快速解析和驗證方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于互聯(lián)網(wǎng)中,對進(jìn)行電子交易雙方進(jìn)行身份驗證的X509數(shù)字證書快速解析和驗證方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)的發(fā)展,人們越來越多的依靠網(wǎng)絡(luò)來完成一些敏感數(shù)據(jù)的事務(wù)處理,比如電子銀行,電子商務(wù)等等。這些敏感數(shù)據(jù)的事務(wù)處理的電子化導(dǎo)致非常重要和私密的數(shù)據(jù)經(jīng)常在網(wǎng)絡(luò)中傳輸。為此,人們發(fā)明了很多新的技術(shù)來保證這些重要和私密的數(shù)據(jù)能夠在網(wǎng)絡(luò)中安全可靠的傳輸,越來越多的用戶使用SSL(Secure Socket Layer,安全套接層)和TLS(Transport Layer Security,傳輸層安全)等加密機(jī)制,它們可以在客戶端/瀏覽器和服務(wù)端之間構(gòu)造安全通道進(jìn)行數(shù)據(jù)傳輸。
SSL/TLS通訊協(xié)議主要有四部分組成記錄協(xié)議(Record Protocol),握手協(xié)議(Handshake Protocol),警報協(xié)議(Alert Protocol)以及應(yīng)用協(xié)議(Application Protocol)。這些協(xié)議的功效如下1、記錄協(xié)議它建立在傳輸協(xié)議(如TCP,UDP等)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密/解密的支持。2、握手協(xié)議用于應(yīng)用數(shù)據(jù)傳輸開始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。3、警報協(xié)議用于向?qū)Φ葘嶓w傳遞SSL/TLS相關(guān)的警報。4、應(yīng)用協(xié)議應(yīng)用服務(wù)真正的數(shù)據(jù)。通過上述四個協(xié)議,SSL/TLS通訊協(xié)議能夠很好地解決通訊安全的問題,但是同時也給服務(wù)器帶來巨大的運算開銷。尤其是第二部分握手協(xié)議,該協(xié)議要處理X509數(shù)字證書的身份驗證問題,需要進(jìn)行復(fù)雜的證書讀取和分析工作。
對X509數(shù)字證書的解析和驗證,傳統(tǒng)的解決方法是以ASN.1(AbstractSyntax Notation One,抽象語法表達(dá)1)編碼規(guī)則的方式對文件進(jìn)行解碼,然后套用到X509數(shù)字證書的結(jié)構(gòu)當(dāng)中。這樣做的好處是可以利用現(xiàn)成通用的ASN.1編碼方法和程序來實現(xiàn),但是對X509數(shù)字證書本身的結(jié)構(gòu)特點利用的不夠,解析時只能根據(jù)ASN.1中定義的標(biāo)識符進(jìn)行比較,再確定內(nèi)容。此方法通常使用遞歸調(diào)用的方式,因此極其耗費CPU等系統(tǒng)時間,同時安全事務(wù)處理的速度也會大大降低,很多客戶的安全事務(wù)請求響應(yīng)會非常慢。因此優(yōu)化安全事務(wù)處理,提高客戶響應(yīng)就成為非常緊迫和具有現(xiàn)實意義的需求。
發(fā)明內(nèi)容
針對上述問題,本發(fā)明的目的是提供一種安全事務(wù)處理效率高同時對系統(tǒng)資源消耗低的X509數(shù)字證書快速解析和驗證方法。
為實現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案一種X509數(shù)字證書快速解析和驗證方法,它包括以下步驟1)根據(jù)X509數(shù)字證書的結(jié)構(gòu)特點,將X509數(shù)字證書拆成證書主體、證書簽名算法標(biāo)識和證書簽名值三個部分;2)根據(jù)X509數(shù)字證書的編碼格式,從證書主體中定位并解析出各關(guān)鍵字段;3)根據(jù)所有解析出來的關(guān)鍵字段的位置信息建立一張索引表,并將所有關(guān)鍵字段的定位信息存放到索引表中;4)當(dāng)再次用到證書關(guān)鍵字段信息時,直接從步驟3)建立的索引表中讀取。
在執(zhí)行步驟2)時,通過以下方法進(jìn)行①首先定位到以“30”開頭來標(biāo)識新部分;②把緊跟“30”的數(shù)字與作為證書字段開始標(biāo)志的數(shù)字80進(jìn)行比較;③如果比較結(jié)果是“no”,則根據(jù)函數(shù)length=*(P+1)計算出長度;④如果比較的結(jié)果是“yes”,則先計算出offset的值,然后根據(jù)循環(huán)length*=256,length+=*(P+2+1),i++計算出內(nèi)容的長度;⑤根據(jù)算出的內(nèi)容長度讀取這個關(guān)健字段的內(nèi)容。
由于采用了以上技術(shù)方案,本發(fā)明具有如下一些優(yōu)點1、由于本發(fā)明根據(jù)X509數(shù)字證書的結(jié)構(gòu)特點和編碼格式,能夠快速定位到關(guān)鍵字段的準(zhǔn)確位置,因此在握手協(xié)議過程中,每次使用到證書內(nèi)容時,均能快速讀取到相關(guān)信息,大大提高了證書解析和驗證的過程,加快了安全事務(wù)處理的響應(yīng)時間。2、當(dāng)需要再次用到證書關(guān)鍵字段信息時,本發(fā)明可以直接從以前建立的索引表中讀取,因此節(jié)省了后續(xù)多次而重復(fù)的證書解析工作,為后續(xù)訪問提供了極大的便利。3、由于本發(fā)明證書解析和驗證的工作效率提高了,因此對系統(tǒng)資源(如處理器,內(nèi)存等等)的損耗大大降低。
圖1是本發(fā)明所參考的X509數(shù)字證書整體結(jié)構(gòu)示意圖 圖2是本發(fā)明證書主體結(jié)構(gòu)示意圖 圖3是本發(fā)明中所用到的證書字段分析定位過程圖
具體實施例方式 下面結(jié)合附圖和實施例對本發(fā)明進(jìn)行詳細(xì)的描述。
如圖1所示,X509數(shù)字證書的結(jié)構(gòu)包括證書主體(TBSCertificate)、證書簽名算法標(biāo)識(signatureAlgorithm)和證書簽名值(signatureValue)。其中TBSCertificate部分是關(guān)鍵部分,它包含了證書的很多關(guān)鍵字段。如圖2所示,比如主體名稱(subject)、簽發(fā)者名稱(issuer)、主體的公鑰(subjectPublicKeyInfo)、證書的有效期(validity)以及其它的相關(guān)信息,這些關(guān)鍵字段正是握手協(xié)議中所需要的數(shù)據(jù)。
由于X509數(shù)字證書文件結(jié)構(gòu)非常清晰,在解析X509數(shù)字證書時,無須完全按照ASN.1編碼的格式先行完整而繁瑣的解析。本發(fā)明的解析方法,能夠依賴ASN.1BER(Basic Encoding Rules,基本編碼規(guī)范)編碼規(guī)范的特點和X509數(shù)字證書結(jié)構(gòu)的特點進(jìn)行快速的解析。
為了詳細(xì)說明本發(fā)明的方法及所達(dá)到的功效,現(xiàn)舉以下實施例 1、根據(jù)X509數(shù)字證書的結(jié)構(gòu)特點將證書拆成證書主體、證書簽名算法標(biāo)識和證書簽名值三個部分。
一張X509數(shù)字證書的主要內(nèi)容如下所示 30 8x yy yy30 8w yy yy TBSCertificate 30zz...30 0D 06 09...30 81 81...... 上述X509數(shù)字證書二進(jìn)制數(shù)據(jù)流中任何一個獨立部分內(nèi)容都以“30”開頭來標(biāo)識新部分的開始,緊跟“30”后面的數(shù)字表示新部分的數(shù)據(jù)長度。比如“8x”表示的是要分拆的三部分的總長度,“8w”表示的是TBSCertificate的長度有w位,取出w位的長度的字節(jié)就是TBSCertificate部分。依次類推,“300D”表示signatureAlgorithm有13位,“30 81 81”表示signatureValue有129位。
2、根據(jù)X509數(shù)字證書的編碼格式,從證書主體中定位關(guān)健字的準(zhǔn)確位置后讀取出各關(guān)鍵字段的位置信息。
目前需要解析出來的關(guān)鍵字段包括證書主體中的證書必備域和整個擴(kuò)展域,具體有主體名稱、簽發(fā)者名稱、主體的公鑰、證書的有效期以及其它的相關(guān)信息。
如圖3所示,說明了如何定位并讀取一個關(guān)鍵字段的基本過程 ①首先定位到以“30”開頭來標(biāo)識新部分;②把緊跟“30”的數(shù)字與作為證書字段開始標(biāo)志的數(shù)字80進(jìn)行比較;③如果比較結(jié)果是“no”,則根據(jù)函數(shù)length=*(P+1)計算出長度,其中P+1表示一個指針,*(P+1)表示從P+1指針處取出的內(nèi)容,這個內(nèi)容就是長度;④如果比較的結(jié)果是“yes”,則先計算出offset的值,然后根據(jù)循環(huán)length*=256,length+=*(P+2+1),i++計算出內(nèi)容的長度;⑤根據(jù)算出的內(nèi)容長度讀取這個關(guān)健字段的內(nèi)容。
3、根據(jù)所有解析出來的關(guān)鍵字段的位置信息建立一張索引表,并將所有關(guān)鍵字段的定位信息存放到索引表中。
索引表用一個簡單的數(shù)組來表示,如下面所示 Certificate[1]=12/*第一個是主體數(shù)據(jù)起始位置*/ Certificate[2]=34/*第二個是簽發(fā)者數(shù)據(jù)起始位置*/ Certificate[3]=86/*第三個是...........................*/ .................. ........................................... 4、從這步開始,凡是要用到關(guān)鍵字段信息的都直接從步驟3建立起來的索引表中讀取出來。這樣在握手協(xié)議過程中,每次使用到X509數(shù)字證書內(nèi)容時,均能快速讀取到相關(guān)信息,大大提高了證書解析和驗證的過程,加快了安全事務(wù)處理的響應(yīng)時間,并且由于X509數(shù)字證書解析和驗證的工作效率提高了,對系統(tǒng)資源(如處理器,內(nèi)存等等)的損耗大大降低。
上述實施例僅為本發(fā)明的一個較佳實施例,在本發(fā)明的實質(zhì)創(chuàng)意范圍內(nèi),本發(fā)明采用的算法可以有許多變化或替換,這些算法的變化或替換都不應(yīng)排除在本發(fā)明的保護(hù)范圍之外。
權(quán)利要求
1、一種X509數(shù)字證書快速解析和驗證方法,它包括以下步驟
1)根據(jù)X509數(shù)字證書的結(jié)構(gòu)特點,將X509數(shù)字證書拆成證書主體、證書簽名算法標(biāo)識和證書簽名值三個部分;
2)根據(jù)X509數(shù)字證書的編碼格式,從證書主體中定位并解析出各關(guān)鍵字段;
3)根據(jù)所有解析出來的關(guān)鍵字段的位置信息建立一張索引表,并將所有關(guān)鍵字段的定位信息存放到索引表中;
4)當(dāng)再次用到證書關(guān)鍵字段信息時,直接從步驟3)建立的索引表中讀取。
2、如權(quán)利要求1所述的一種X509數(shù)字證書快速解析和驗證方法,其特征在于在執(zhí)行步驟2)時,通過以下方法進(jìn)行
①首先定位到以“30”開頭來標(biāo)識新部分;
②把緊跟“30”的數(shù)字與作為證書字段開始標(biāo)志的數(shù)字80進(jìn)行比較;
③如果比較結(jié)果是“no”,則根據(jù)函數(shù)length=*(P+1)計算出長度;
④如果比較的結(jié)果是“yes”,則先計算出offset的值,然后根據(jù)循環(huán)length*=256,length+=*(P+2+1),i++計算出內(nèi)容的長度;
⑤根據(jù)算出的內(nèi)容長度讀取這個關(guān)健字段的內(nèi)容。
全文摘要
本發(fā)明涉及一種X509數(shù)字證書快速解析和驗證方法,它包括以下步驟1)根據(jù)X509數(shù)字證書的結(jié)構(gòu)特點,將X509數(shù)字證書拆成證書主體、證書簽名算法標(biāo)識和證書簽名值三個部分;2)根據(jù)X509數(shù)字證書的編碼格式,從證書主體中定位并解析出各關(guān)鍵字段;3)根據(jù)所有解析出來的關(guān)鍵字段的位置信息建立一張索引表,并將所有關(guān)鍵字段的定位信息存放到索引表中;4)當(dāng)再次用到證書關(guān)鍵字段信息時,直接從步驟3)建立的索引表中讀取。本發(fā)明在提高安全事務(wù)處理效率的同時降低了對系統(tǒng)資源的消耗,并為后續(xù)訪問提供了極大的便利。
文檔編號H04L29/06GK101257387SQ200810101869
公開日2008年9月3日 申請日期2008年3月13日 優(yōu)先權(quán)日2008年3月13日
發(fā)明者林桂賢, 汪宗斌, 陳永亮 申請人:華耀環(huán)宇科技(北京)有限公司