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