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