数字证书——密码学笔记(六)
一、數(shù)字證書
數(shù)字證書可用于:發(fā)送安全電子郵件、訪問安全站點(diǎn)、網(wǎng)上證券、網(wǎng)上招標(biāo)采購(gòu)、網(wǎng)上簽約、網(wǎng)上辦公、網(wǎng)上繳費(fèi)、網(wǎng)上稅務(wù)等網(wǎng)上安全電子事務(wù)處理和安全電子交易活動(dòng)。?
數(shù)字證書的格式一般采用X.509國(guó)際標(biāo)準(zhǔn)。目前,數(shù)字證書認(rèn)證中心主要簽發(fā)安全電子郵件證書、個(gè)人和企業(yè)身份證書、服務(wù)器證書以及代碼簽名證書等幾種類型證書。
數(shù)字證書的格式遵循ITUTX.509國(guó)際標(biāo)準(zhǔn)。
1.1 證書結(jié)構(gòu)
證書結(jié)構(gòu) | 基本證書域(TBSCertificate) |
簽名算法域(signatureAlgorithm) | |
簽名值域(signatureValue) |
1.2 基本證書域結(jié)構(gòu)
名稱 | 描述 | 說明 |
version | 版本號(hào) | ? |
serialNumber | 序列號(hào) | ? |
signature | 簽名算法 | ? |
issuer | 頒發(fā)者 | ? |
validity | 有效日期 | ? |
subject | 主體 | ? |
subjectPublicKeyInfo | 主體公鑰信息 | ? |
issuerUniqueID | 頒發(fā)者唯一標(biāo)識(shí)符 | 本標(biāo)準(zhǔn)中不使用 |
subjectUniqueID | 主體唯一標(biāo)識(shí)符 | 本標(biāo)準(zhǔn)中不使用 |
extensions | 擴(kuò)展項(xiàng) | 按本標(biāo)準(zhǔn)的擴(kuò)展項(xiàng)進(jìn)行定義,參考下一節(jié) |
1.3 標(biāo)準(zhǔn)的擴(kuò)展域結(jié)構(gòu)
名稱 | 描述 | 關(guān)鍵度 |
authorityKeyIdentifier | 機(jī)構(gòu)密鑰標(biāo)識(shí)符 | 非關(guān)鍵 |
subjectKeyIdentifier | 主體密鑰標(biāo)識(shí)符 | 非關(guān)鍵 |
keyUsage | 密鑰用法 | 雙證書標(biāo)記為關(guān)鍵,單證書標(biāo)記為非關(guān)鍵 |
extKeyUsage | 擴(kuò)展密鑰用途 | 如果密鑰的用法只限于所指示的用途時(shí)標(biāo)記為關(guān)鍵,否則標(biāo)記為非關(guān)鍵 |
privateKeyUsagePeriod | 私有密鑰使用期 | 非關(guān)鍵 |
certificatePolicies | 證書策略 | 非關(guān)鍵 |
policyMappings | 策略映射 | 如果證書用戶需要正確解釋發(fā)布的CA設(shè)定的規(guī)則時(shí)標(biāo)識(shí)為關(guān)鍵,否則標(biāo)識(shí)為非關(guān)鍵 |
subjectAltName | 主體替換名稱 | 非關(guān)鍵 |
issuerAltName | 頒發(fā)者替換名稱 | 非關(guān)鍵 |
subjectDirectoryAttributes | 主體目錄屬性 | 非關(guān)鍵 |
basicConstraints | 基本限制 | CA證書標(biāo)記為關(guān)鍵,終端實(shí)體證書標(biāo)記為非關(guān)鍵 |
nameConstraints | 名稱限制 | 如果證書用戶系統(tǒng)應(yīng)檢驗(yàn)所處理的認(rèn)證路徑與此擴(kuò)展中的值是否一致時(shí)標(biāo)記為關(guān)鍵,否則標(biāo)記為非關(guān)鍵 |
policyConstraints | 策略限制 | 如果證書用戶需要正確地解釋認(rèn)證機(jī)構(gòu)CA設(shè)定的規(guī)則時(shí)標(biāo)識(shí)為關(guān)鍵,否則標(biāo)識(shí)為非關(guān)鍵 |
CRLDistributionPoints | CRL分發(fā)點(diǎn) | 非關(guān)鍵 |
inhibitAnyPolicy | 限制所有策略 | 如果證書用戶需要正確地解釋認(rèn)證機(jī)構(gòu)CA設(shè)定的規(guī)則時(shí)標(biāo)識(shí)為關(guān)鍵,否則標(biāo)識(shí)為非關(guān)鍵 |
freshestCRL | 最新的CRL | 非關(guān)鍵 |
id-pkix | 私有的 Internet 擴(kuò)展 | 非關(guān)鍵 |
authorityInfoAccess | 機(jī)構(gòu)信息訪問 | 非關(guān)鍵 |
SubjectInformationAccess | 主體信息訪問 | 非關(guān)鍵 |
IdentifyCardNumber | 個(gè)人身份證號(hào)碼 | 非關(guān)鍵 |
InuranceNumber | 個(gè)人社會(huì)保險(xiǎn)號(hào) | 非關(guān)鍵 |
ICRegistrationNumber | 企業(yè)工商注冊(cè)號(hào) | 非關(guān)鍵 |
OrganizationCode | 企業(yè)組織機(jī)構(gòu)代碼 | 非關(guān)鍵 |
TaxationNumber | 企業(yè)稅號(hào) | 非關(guān)鍵 |
二、X.509數(shù)字證書的編碼
X.509證書的結(jié)構(gòu)是用ASN1(Abstract Syntax Notation One)進(jìn)行描述數(shù)據(jù)結(jié)構(gòu),并使用ASN1語法進(jìn)行編碼。
ASN1采用一個(gè)個(gè)的數(shù)據(jù)塊來描述整個(gè)數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)據(jù)塊都有四個(gè)部分組成:
數(shù)據(jù)塊數(shù)據(jù)類型標(biāo)識(shí)(一個(gè)字節(jié))
數(shù)據(jù)塊長(zhǎng)度(1-128個(gè)字節(jié))
數(shù)據(jù)塊的值
數(shù)據(jù)塊結(jié)束標(biāo)識(shí)(可選)
1.數(shù)據(jù)塊數(shù)據(jù)類型標(biāo)識(shí)(一個(gè)字節(jié))
數(shù)據(jù)類型包括簡(jiǎn)單類型和結(jié)構(gòu)類型。
簡(jiǎn)單類型是不能再分解類型,如整型(INTERGER)、比特串(BIT STRING)、字節(jié)串(OCTET STRING)、對(duì)象標(biāo)識(shí)符(OBIECT IDENTIFIER)、日期型(UTCTime)等
結(jié)構(gòu)類型是由簡(jiǎn)單類型和結(jié)構(gòu)類型組合而成的,如順序類型(SEQUENCE,SEQUENCE OF)、選擇類型(CHOICE)、集合類型(SET)等。
- 順序類型的數(shù)據(jù)塊值由按給定順序成員成員數(shù)據(jù)塊值按照順序組成
- 選擇類型的數(shù)據(jù)塊值由多個(gè)成員數(shù)據(jù)數(shù)據(jù)塊類型中選擇一個(gè)的數(shù)據(jù)塊值
- 集合數(shù)據(jù)塊類型由成員數(shù)據(jù)塊類型的一個(gè)或多個(gè)值構(gòu)成
這個(gè)標(biāo)識(shí)字節(jié)的結(jié)構(gòu)如下:
1.1 Bite-bit 7
用來表示TAG類型,共有四種,分別是universal(00)、application(01)、context-specific(10)和private(11)。
這兩位為universal(00)時(shí),bit5-bit1的值表示不同的universal的值:
? ? ? ? ? ? 標(biāo)記(TAG) ? ?對(duì)應(yīng)類型
[UNIVERSAL 1] BOOLEAN [有兩個(gè)值:false或true]
[UNIVERSAL 2] INTEGER [整型值]
[UNIVERSAL 3] BIT STRING [0位或多位]
[UNIVERSAL 4] OCTET STRING [0字節(jié)或多字節(jié)]
[UNIVERSAL 5] NULL
[UNIVERSAL 6] OBJECT IDENTIFIER [相應(yīng)于一個(gè)對(duì)象的獨(dú)特標(biāo)識(shí)數(shù)字]
[UNIVERSAL 7] OBJECT DESCRIPTOR ?[一個(gè)對(duì)象的簡(jiǎn)稱]
[UNIVERSAL 8] EXTERNAL, INSTANCE OF [ASN.1沒有定義的數(shù)據(jù)類型]
[UNIVERSAL 9] REAL [實(shí)數(shù)值]
[UNIVERSAL 10] ENUMERATED [數(shù)值列表,這些數(shù)據(jù)每個(gè)都有獨(dú)特的標(biāo)識(shí)符,作為ASN.1定義數(shù)據(jù)類型的一部分]
[UNIVERSAL 12] UTF8String
[UNIVERSAL 13] RELATIVE-OID
[UNIVERSAL 16]SEQUENCE,SEQUENCE OF [有序數(shù)列,SEQUENCE里面的每個(gè)數(shù)值都可以是不同類型的,而SEQUENCE OF里是0個(gè)或多個(gè)類型相同的數(shù)據(jù)]
[UNIVERAL 17]SET,SET OF[無序數(shù)列,SET里面的每個(gè)數(shù)值都可以是不同類型的,而SET OF 里是0個(gè)或多個(gè)類型相同的數(shù)據(jù)]
[UNIVERSAL 18] NumericString [0-9以及空格]
[UNIVERSAL 19] PrintableString [A-Z、a-z、0-9、空格以及符號(hào)'()+,-./:=?]
[UNIVERSAL 20] TeletexString, T61String
[UNIVERSAL 21] VideotexString
[UNIVERSAL 22] IA5String
[UNIVERSAL 23] UTCTime [統(tǒng)一全球時(shí)間格式]
[UNIVERSAL 24] GeneralizedTime
[UNIVERSAL 25] GraphicString
[UNIVERSAL 26] VisibleString, ISO646String
[UNIVERSAL 27] GeneralString
[UNIVERSAL 28] UniversalString
[UNIVERSAL 29] CHARACTER STRING
[UNIVERSAL 30] BMPString
[UNIVERSAL 31]... reserved for future use
這兩位為context-specific(10)時(shí),bit5-bit1的值表示特殊內(nèi)容:
? ? ? ? ? ??[0] -- 表示證書的版本
? ? ? ? ? ? [1] -- issuerUniqueID,表示證書發(fā)行者的唯一id
? ? ? ? ? ? ? ?[2] -- subjectUniqueID,表示證書主體的唯一id
? ? ? ? ? ? ? ?[3] -- 表示證書的擴(kuò)展字段
1.2 bit6
表示是否為結(jié)構(gòu)類型(1位結(jié)構(gòu)類型,0則表明編碼類型是簡(jiǎn)單類型)。
1.3 bit5-bit1
是類型的TAG值。根據(jù)bit8-bit7的不同值有不同的含義,具體含義見上面的描述。
如SEQUENCE類型數(shù)據(jù)塊,其TAG類型位UNIVESAL(00),屬于結(jié)構(gòu)類型(1),TAG的值為16(10000),所以其類型標(biāo)示字段值為(10100011),即為0xA3。
2. 數(shù)據(jù)塊長(zhǎng)度(1-128個(gè)字節(jié))
長(zhǎng)度字段,有兩種編碼格式。
若長(zhǎng)度值小于等于127,則用一個(gè)字節(jié)表示,bit8=0,bit7-bit1存放長(zhǎng)度值;
若長(zhǎng)度值大于127,則用多個(gè)字節(jié)表示,可以有2到127個(gè)字節(jié)。第一個(gè)字節(jié)的第8位為1,其它低7位給出后面該域使用的字節(jié)的數(shù)量,從該域第二個(gè)字節(jié)開始給出數(shù)據(jù)的長(zhǎng)度,高位優(yōu)先。
還有一種特殊情況,這個(gè)字節(jié)為0x80,表示數(shù)據(jù)塊長(zhǎng)度不定,由數(shù)據(jù)塊結(jié)束標(biāo)識(shí)結(jié)束數(shù)據(jù)塊。
3. 數(shù)據(jù)塊的值
存放數(shù)據(jù)塊的值,具體編碼隨數(shù)據(jù)塊類型不同而不同。
4. 數(shù)據(jù)塊結(jié)束標(biāo)識(shí)(可選)
結(jié)束數(shù)據(jù)塊的值,兩個(gè)字節(jié)(0x0000),只有在長(zhǎng)度值為不定時(shí)才會(huì)出現(xiàn)。
三、X.509證書的結(jié)構(gòu)
1. X.509證書基本部分
1.1 版本號(hào) ? ?
? ? ? 標(biāo)識(shí)證書的版本(版本1、版本2或是版本3) ? ?
1.2 序列號(hào)
? ? ? 標(biāo)識(shí)證書的唯一整數(shù),由證書頒發(fā)者分配的本證書的唯一標(biāo)識(shí)符。
1.3 簽名
? ? ? 用于簽證書的算法標(biāo)識(shí),由對(duì)象標(biāo)識(shí)符加上相關(guān)的參數(shù)組成,用于說明本證書所用的數(shù)字簽名算法。例如,SHA-1和RSA的對(duì)象標(biāo)識(shí)符就用來說明該數(shù)字簽名是利用RSA對(duì)SHA-1雜湊加密。
1.4 頒發(fā)者
? ? ? 證書頒發(fā)者的可識(shí)別名(DN)
1.5 有效期
? ? ? 證書有效期的時(shí)間段。本字段由“Not Before”和“Not After”兩項(xiàng)組成,它們分別由UTC時(shí)間或一般的時(shí)間表示(在RFC2459中有詳細(xì)的時(shí)間表示規(guī)則)。
1.6 主體
? ? ? 證書擁有者的可識(shí)別名,這個(gè)字段必須是非空的,除非你在證書擴(kuò)展中有別名。
1.7 主體公鑰信息
? ? ? 主體的公鑰(以及算法標(biāo)識(shí)符)
1.8 頒發(fā)者唯一標(biāo)識(shí)符
? ? ? 標(biāo)識(shí)符——證書頒發(fā)者的唯一標(biāo)識(shí)符,僅在版本2和版本3中有要求,屬于可選項(xiàng)。
1.9 主體唯一標(biāo)識(shí)符
? ? ? 證書擁有者的唯一標(biāo)識(shí)符,僅在版本2和版本3中有要求,屬于可選項(xiàng)。
2. X.509擴(kuò)展部分
可選的標(biāo)準(zhǔn)和專用的擴(kuò)展(僅在版本2和版本3中使用),擴(kuò)展部分的元素都有這樣的結(jié)構(gòu):
?? ExtensiExtension?::=?SEQUENCE?{ ??????? exextnID????? OBJECT IDENTIFIER, ??????? crcritical??? BOOLEAN DEFAULT FALSE, ??????? exextnValue?? OCTET STRING?}extnID:表示一個(gè)擴(kuò)展元素的OID
critical:表示這個(gè)擴(kuò)展元素是否極重要
extnValue:表示這個(gè)擴(kuò)展元素的值,字符串類型
擴(kuò)展部分包括:
2.1 發(fā)行者密鑰標(biāo)識(shí)符
? ? ? 證書所含密鑰的唯一標(biāo)識(shí)符,用來區(qū)分同一證書擁有者的多對(duì)密鑰。
2.2 密鑰使用
? ? ? 一個(gè)比特串,指明(限定)證書的公鑰可以完成的功能或服務(wù),如:證書簽名、數(shù)據(jù)加密等。
? ? ? 如果某一證書將KeyUsage擴(kuò)展標(biāo)記為“極重要”,而且設(shè)置為“KeyCertSign”,則在SSL通信期間該證書出現(xiàn)時(shí)將被拒絕,因?yàn)樵撟C書擴(kuò)展表示相關(guān)私鑰應(yīng)只用于簽寫證書,而不應(yīng)該用于SSL。
2.3 CRL分布點(diǎn)
? ? ? 指明CRL的分布地點(diǎn)。
2.4 私鑰的使用期
? ? ? 指明證書中與公鑰想聯(lián)系的私鑰的使用期限,它也有Not Before和Not After組成。若此項(xiàng)不存在時(shí),公私鑰的使用期是一樣的。
2.5 證書策略
? ? ? 由對(duì)象標(biāo)識(shí)符和限定符組成,這些對(duì)象標(biāo)識(shí)符說明證書的頒發(fā)和使用策略有關(guān)。
2.6 策略映射
? ? ? 表明兩個(gè)CA域之間的一個(gè)或多個(gè)策略對(duì)象標(biāo)識(shí)符的等價(jià)關(guān)系,僅在CA證書里存在。
2.7 主體別名
? ? ? 指出證書所擁有者的別名,如電子郵件地址、IP地址等,別名是和DN綁定在一起的。
2.8 頒發(fā)者別名
? ? ? 指出證書頒發(fā)者的別名,如電子郵件地址、IP地址等,但頒發(fā)者的DN必須出現(xiàn)在證書的頒發(fā)者字段。
2.9 主體目錄屬性
? ? ? 指出證書擁有者的一系列屬性。可以使用這一項(xiàng)來傳遞訪問控制信息。
總結(jié)
以上是生活随笔為你收集整理的数字证书——密码学笔记(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 序列密码体制——密码学笔记(三)
- 下一篇: 欧几里德与扩展欧几里德算法——密码学笔记