?
一、?X.509數字證書的編碼
X.509證書的結構是用ASN1(Abstract Syntax Notation One)進行描述數據結構,并使用ASN1語法進行編碼。
ASN1采用一個個的數據塊來描述整個數據結構,每個數據塊都有四個部分組成:
1、數據塊數據類型標識(一個字節)
數據類型包括簡單類型和結構類型。
簡單類型是不能再分解類型,如整型(INTERGER)、比特串(BIT STRING)、字節串(OCTET STRING)、對象標示符(OBJECT IDENTIFIER)、日期型(UTCTime)等。
結構類型是由簡單類型和結構類型組合而成的,如順序類型(SEQUENCE, SEQUENCE OF)、選擇類型(CHOICE)、集合類型(SET)等。
l???????? 順序類型的數據塊值由按給定順序成員成員數據塊值按照順序組成,;
l???????? 選擇類型的數據塊值由多個成員數據數據塊類型中選擇一個的數據塊值;
l???????? 集合數據塊類型由成員數據塊類型的一個或多個值構成。
這個標識字節的結構如下:
1.1.??????? Bit8-bit7
用來標示 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個或多個類型相同的數據]
[UNIVERSAL 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類型位UNIVERSAL(00),屬于結構類型(1),TAG值為16(10000)所以其類型標示字段值為(00110000),即為0x30。
再如,證書擴展字段類型的數據塊,TAG類型為(10),屬結構類型(1),TAG的值為3(00011),所以其類型標示字段值為(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中使用),擴展部分的元素都有這樣的結構:
?? Extension?::=?SEQUENCE?{
??????? extnID????? OBJECT IDENTIFIER,
??????? critical??? BOOLEAN DEFAULT FALSE,
??????? extnValue?? 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.??????? 主體目錄屬性
指出證書擁有者的一系列屬性??梢允褂眠@一項來傳遞訪問控制信息。
三、?X.509證書詳細描述
?? Certificate?::=?SEQUENCE?{
??????? tbsCertificate?????? TBSCertificate, -- 證書主體
??????? signatureAlgorithm?? AlgorithmIdentifier, -- 證書簽名算法標識
??????? signatureValue?????? BIT STRING?--證書簽名值,是使用signatureAlgorithm部分指定的簽名算法對tbsCertificate證書主題部分簽名后的值.
???????? }
?? TBSCertificate?::=?SEQUENCE?{
??????? version???????? [0]?EXPLICIT Version DEFAULT v1, -- 證書版本號
??????? serialNumber???????? CertificateSerialNumber, -- 證書序列號,對同一CA所頒發的證書,序列號唯一標識證書
????? ??signature??????????? AlgorithmIdentifier, --證書簽名算法標識
??????? issuer?????????????? Name,??????????????? --證書發行者名稱
??????? validity???????????? Validity,??????????? --證書有效期
??????? subject????????????? Name,??????????????? --證書主體名稱
??????? subjectPublicKeyInfo SubjectPublicKeyInfo,--證書公鑰
??????? issuerUniqueID?[1]?IMPLICIT UniqueIdentifier OPTIONAL,
???????????????????????????? -- 證書發行者ID(可選),只在證書版本2、3中才有
??????? subjectUniqueID [2]?IMPLICIT UniqueIdentifier OPTIONAL,
???????????????????????????? -- 證書主體ID(可選),只在證書版本2、3中才有
??????? extensions????? [3]?EXPLICIT Extensions OPTIONAL
???????????????????????????? -- 證書擴展段(可選),只在證書版本3中才有
??????? }
?? Version?::=?INTEGER?{?v1(0), v2(1), v3(2)?}
?? CertificateSerialNumber?::=?INTEGER
?
?? AlgorithmIdentifier?::=?SEQUENCE?{
??????? algorithm?????????????? OBJECT IDENTIFIER,
??????? parameters????????????? ANY DEFINED BY algorithm OPTIONAL?}
?? parameters:
?? Dss-Parms?::=?SEQUENCE?{?--parameters ,DSA(DSS)算法時的parameters,
RSA算法沒有此參數
?? ?????p???????? ????INTEGER,
?? ?????q???????????? INTEGER,
?? ?????g???????????? INTEGER?}
?
signatureValue:
Dss-Sig-Value?::=?SEQUENCE?{?-- sha1DSA簽名算法時,簽名值
?????????????????? r?????? INTEGER,
?????????????????????s?????? INTEGER?}
?
?? Name ::= CHOICE {
???? RDNSequence }
?? RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
?? RelativeDistinguishedName ::=
???? SET OF AttributeTypeAndValue
?? AttributeTypeAndValue ::= SEQUENCE {
???? type???? AttributeType,
???? value??? AttributeValue }
?? AttributeType ::= OBJECT IDENTIFIER
?? AttributeValue ::= ANY DEFINED BY AttributeType
?
?? Validity ::= SEQUENCE {
??????? notBefore????? Time, ?-- 證書有效期起始時間
??????? notAfter?????? Time??-- 證書有效期終止時間
??????? }
?? Time ::= CHOICE {
??????? utcTime??????? UTCTime,
??????? generalTime??? GeneralizedTime }
?? UniqueIdentifier?::=?BIT STRING
?? SubjectPublicKeyInfo?::=?SEQUENCE?{
??????? algorithm????? ??????AlgorithmIdentifier,?-- 公鑰算法
??????? subjectPublicKey???? BIT STRING??????????? -- 公鑰值
??????? }
subjectPublicKey:
RSAPublicKey ::= SEQUENCE {?-- RSA算法時的公鑰值
???????? modulus??????????? INTEGER, -- n
???????? publicExponent???? INTEGER?-- e -- }
?
?? Extensions?::=?SEQUENCE SIZE (1..MAX) OF Extension
?? Extension?::=?SEQUENCE?{
??????? extnID????? OBJECT IDENTIFIER,
??????? critical??? BOOLEAN DEFAULT FALSE,
??????? extnValue?? OCTET STRING?}
四、?X.509數字證書實例
這是從RFC 2459 Internet X.509 Public Key Infrastructure標準文檔中摘取的兩個證書例子。本文在例子的原來基礎上加了些注釋。
1、DSA證書,CA證書
證書包含699字節,證書版本號為3。
該證書包含以下內容:
(a) 證書序列號是17 (0x11);
(b) 證書使用DSA和SHA-1哈希算法簽名;
(c) 證書發行者的名字是OU=nist; O=gov; C=US
(d) 證書主體的名字是OU=nist; O=gov; C=US
(e) 證書的有效期從1997-6-30到 1997-12-31;
(f) 證書包含一個1024 bit DSA 公鑰及其參數(三個整數p、q、g);
(g) 證書包含一個使用者密鑰標識符(subjectKeyIdentifier)擴展項
(h) 證書是一個CA證書(通過basicConstraints基本擴展項標識)
0000 30 82 02 b7?695: SEQUENCE??? // Certificate:: SEQUENCE類型(30),數據塊長度字節
為2(82),長度為695(02 b7)
0004 30 82 02 77?631: . SEQUENCE?// tbsCertificate:: SEQUENCE類型,長度631
0008 a0 03????????? 3: . . [0]???? // Version:: 特殊內容-證書版本(a0),長度3
0010 02 01????????? 1: . . . INTEGER 2?//整數類型(02),長度1
???????????????????? : 02?????????????? // 版本3(2)
0013 02 01????????? 1: . . INTEGER 17?? // serialNumber:: 整數類型(02),長度1
???????????????????? : 11????????????? ?// 證書序列號 17
0016 30 09????????? 9: . . SEQUENCE?? // signature:: SEQUENCE類型(30),長度9
0018 06 07????????? 7: . . . OID 1.2.840.10040.4.3: dsa-with-sha //signature:: OBJECT
IDENTIFIER類型,長度7
???????????????????? : 2a 86 48 ce 38 04 03?? // 表示dsa-with-sha算法(見注1)
0027 30 2a???????? 42: . . SEQUENCE??????????? // 以下紅色的數據塊表示issuer信息
0029 31 0b???????? 11: . . . SET
0031 30 09????????? 9: . . . . SEQUENCE
0033 06 03????????? 3: . . . . . OID 2.5.4.6: C
???????????????????? : 55 04 06
0038 13 02????????? 2: . . . . . PrintableString?'US'
???????????????????? : 55 53
0042 31 0c???????? 12: . . . SET
0044 30 0a???????? 10: . . . . SEQUENCE
0046 06 03????????? 3: . . . . . OID 2.5.4.10: O
???????????????????? : 55 04 0a
0051 13 03????????? 3: . . . . . PrintableString?'gov'
???????????????????? : 67 6f 76
0056 31 0d???????? 13: . . . SET
0058 30 0b???????? 11: . . . . SEQUENCE
0060 06 03????????? 3: . . . . . OID 2.5.4.11: OU
???????????????????? : 55 04 0b
0065 13 04????????? 4: . . . . . PrintableString?'nist'
???????????????????? : 6e 69 73 74
0071 30 1e???????? 30: . . SEQUENCE???????? // validity:: SEQUENCE類型(30),長度30
0073 17 0d???????? 13: . . . UTCTime?'970630000000Z' // notBefore:: UTCTime類型(23)
長度13
???????????????????? : 39 37 30 36 33 30 30 30 30 30 30 30 5a
0088 17 0d???????? 13: . . . UTCTime?'971231000000Z' // notBefore:: UTCTime類型(23)
長度13
???????????????????? : 39 37 31 32 33 31 30 30 30 30 30 30 5a
0103 30 2a???????? 42: . . SEQUENCE????????? // 以下紅色的數據塊表示subject信息
0105 31 0b???????? 11: . . . SET
0107 30 09????????? 9: . . . . SEQUENCE
0109 06 03????????? 3: . . . . . OID 2.5.4.6: C
???????????????????? : 55 04 06
0114 13 02????????? 2: . . . . . PrintableString?'US'
???????????????????? : 55 53
0118 31 0c???????? 12: . . . SET
0120 30 0a???????? 10: . . . . SEQUENCE
0122 06 03????????? 3: . . . . . OID 2.5.4.10: O
???????????????????? : 55 04 0a
0127 13 03????????? 3: . . . . . PrintableString?'gov'
???????????????????? : 67 6f 76
0132 31 0d???????? 13: . . . SET
0134 30 0b???????? 11: . . . . SEQUENCE
0136 06 03????????? 3: . . . . . OID 2.5.4.11: OU
???????????????????? : 55 04 0b
0141 13 04????????? 4: . . . . . PrintableString?'nist'
???????????????????? : 6e 69 73 74
0147 30 82 01 b4?436: . . SEQUENCE?// subjectPublicKeyInfo:: SEQUENCE類型(30),
長度436
0151 30 82 01 29?297: . . . SEQUENCE
0155 06 07????????? 7: . . . . OID 1.2.840.10040.4.1: dsa?//algorithm:: OBJECT
IDENTIFIER類型,長度7
???????????????????? : 2a 86 48 ce 38 04 01??? // 表示DSA算法(見注1)
0164 30 82 01 1c?284: . . . . SEQUENCE??????? // DSA算法的parameters,三個整數
p、q、g
0168 02 81 80???? 128: . . . . . INTEGER?????? // p參數
???????????????????? : d4 38 02 c5 35 7b d5 0b a1 7e 5d 72 59 63 55 d3
???????????????????? : 45 56 ea e2 25 1a 6b c5 a4 ab aa 0b d4 62 b4 d2
???????????????????? : 21 b1 95 a2 c6 01 c9 c3 fa 01 6f 79 86 83 3d 03
???????????????????? : 61 e1 f1 92 ac bc 03 4e 89 a3 c9 53 4a f7 e2 a6
???????????????????? : 48 cf 42 1e 21 b1 5c 2b 3a 7f ba be 6b 5a f7 0a
???????????????????? : 26 d8 8e 1b eb ec bf 1e 5a 3f 45 c0 bd 31 23 be
????????????????????: 69 71 a7 c2 90 fe a5 d6 80 b5 24 dc 44 9c eb 4d
???????????????????? : f9 da f0 c8 e8 a2 4c 99 07 5c 8e 35 2b 7d 57 8d
0299 02 14???????? 20: . . . . . INTEGER?????? // q參數
???????????????????? : a7 83 9b f3 bd 2c 20 07 fc 4c e7 e8 9f f3 39 83
???????????????????? : 51 0d dc dd
0321 02 81 80???? 128: . . . . . INTEGER?????? // g參數
???????????????????? : 0e 3b 46 31 8a 0a 58 86 40 84 e3 a1 22 0d 88 ca
???????????????????? : 90 88 57 64 9f 01 21 e0 15 05 94 24 82 e2 10 90
???????????????????? : d9 e1 4e 10 5c e7 54 6b d4 0c 2b 1b 59 0a a0 b5
???????????????????? : a1 7d b5 07 e3 65 7c ea 90 d8 8e 30 42 e4 85 bb
???????????????????? : ac fa 4e 76 4b 78 0e df 6c e5 a6 e1 bd 59 77 7d
???????????????????? : a6 97 59 c5 29 a7 b3 3f 95 3e 9d f1 59 2d f7 42
???????????????????? : 87 62 3f f1 b8 6f c7 3d 4b b8 8d 74 c4 ca 44 90
???????????????????? : cf 67 db de 14 60 97 4a d1 f7 6d 9e 09 94 c4 0d
0452 03 81 84???? 132: . . . BIT STRING?(0 unused bits) // subjectPublicKey::
公鑰值,BIT STRING類型,長度132字節(好像應該是131字節)
0455 02 81 80???? 128: . . . . INTEGER // 公鑰值,表現為integer類型,128字節,1024位
: aa 98 ea 13 94 a2 db f1 5b 7f 98 2f 78 e7 d8 e3
???????????????????? : b9 71 86 f6 80 2f 40 39 c3 da 3b 4b 13 46 26 ee
???????????????????? : 0d 56 c5 a3 3a 39 b7 7d 33 c2 6b 5c 77 92 f2 55
???????????????????? : 65 90 39 cd 1a 3c 86 e1 32 eb 25 bc 91 c4 ff 80
???????????????????? : 4f 36 61 bd cc e2 61 04 e0 7e 60 13 ca c0 9c dd
???????????????????? : e0 ea 41 de 33 c1 f1 44 a9 bc 71 de cf 59 d4 6e
???????????????????? : da 44 99 3c 21 64 e4 78 54 9d d0 7b ba 4e f5 18
???????????????????? : 4d 5e 39 30 bf e0 d1 f6 f4 83 25 4f 14 aa 71 e1
0587 a3 32???????? 50: . . [3]??????????? ?// extensions:: 特殊內容-證書擴展部分(a3),
長度50
0589 30 30???????? 48: . . . SEQUENCE
0591 30 0f????????? 9: . . . . SEQUENCE?? // 擴展basicConstraints
0593 06 03????????? 3: . . . . . OID 2.5.29.19: basicConstraints
???????????????????? : 55 1d 13
0598 01 01????????? 1: . . . . . TRUE???? // true,表示為CA證書
???????????????????? : ff
0601 04 05????????? 5: . . . . . OCTET STRING
???????????????????? : 30 03 01 01 ff
0608 30 1d???????? 29: . . . . SEQUENCE?? // 擴展 subjectKeyIdentifier
0610 06 03????????? 3: . . . . . OID 2.5.29.14: subjectKeyIdentifier
???????????????????? : 55 1d 0e
0615 04 16???????? 22: . . . . . OCTET STRING?//擴展 subjectKeyIdentifier的值
???????????????????? : 04 14 e7 26 c5 54 cd 5b a3 6f 35 68 95 aa d5 ff
???????????????????? : 1c 21 e4 22 75 d6
0639 30 09????????? 9: . SEQUENCE?// signatureAlgorithm:: = AlgorithmIdentifier
0641 06 07????????? 7: . . OID 1.2.840.10040.4.3: dsa-with-sha
???????????????????? : 2a 86 48 ce 38 04 03
0650 03 2f???????? 47: . BIT STRING?(0 unused bits)?// bit串,證書簽名值,47字節
0652 30 2c?????? ??44: . . SEQUENCE
0654 02 14???????? 20: . . . INTEGER?????? // 簽名值,20字節,160bit
???????????????????? : a0 66 c1 76 33 99 13 51 8d 93 64 2f ca 13 73 de
???????????????????? : 79 1a 7d 33
0674 02 14???????? 20: . . . INTEGER?????? // 簽名值,20字節,160bit
: 5d 90 f6 ce 92 4a bf 29 11 24 80 28 a6 5a 8e 73
???????????????????? : b6 76 02 68
2、RSA證書,非CA證書
證書包含675字節,證書版本號為3。
該證書包含以下內容:
(a) 證書序列號是256 (0x100);
(b) 證書使用RSA和MD2哈希算法簽名;
(c) 證書發行者的名字是OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(d) 證書主體的名字是CN=Francisco Jordan;OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(e) 證書的有效期從1996-5-21到 1997-5-21;
(f) 證書包含一個768 bit RSA 公鑰;
(g) 證書是一個非CA證書(通過一個基本擴展項標識)
(h) 證書包含證書主體別名、證書發行者別名–都是URLs
(i)?證書包含一個發行者密鑰標識符和證書策略擴展,和
(j)?證書包含一個密鑰用法的擴展,指定用于數字簽名
?
0000 30 80?????????? : SEQUENCE?? (size undefined)?// Certificate:: SEQUENCE類型(30),數據塊長度不定,由00、00作為結束符
0002 30 82 02 40?576: . SEQUENCE??????? // tbsCertificate:: SEQUENCE類型,長度576
0006 a0 03????????? 3: . . [0]?????????? // Version:: 特殊內容-證書版本(a0),長度3
0008 02 01????????? 1: . . . INTEGER 2?? //整數類型(02),長度1
???????????????????? : 02??????????????? // 版本3(2)
0011 02 02????????? 2: . . INTEGER 256?? //serialNumber:: 整數類型(02),長度2
???????????????????? : 01 00???? ????????// 證書序列號256
0015 30 0d???????? 13: . . SEQUENCE????? // signature:: SEQUENCE類型(30),長度13
0017 06 09????????? 9: . . . OID 1.2.840.113549.1.1.2: MD2WithRSAEncryption
?????????????????????????? ??????????//signature:: OBJECT IDENTIFIER類型,長度9
??????? ?????????????: 2a 86 48 86 f7 0d 01 01 02 //MD2WithRSAEncryption算法(見注1)
0028 05 00????????? 0: . . . NULL
0030 30 68???????? 88: . . SEQUENCE?????????????? // 以下紅色的數據塊表示issuer信息
0032 31 0b???????? 11: . . . SET
0034 30 09????????? 9: . . . . SEQUENCE
0036 06 03????????? 3: . . . . . OID 2.5.4.6: C
???????????????????? : 55 04 06
0041 13 02????????? 2: . . . . . PrintableString?'ES'
???????????????????? : 45 53
0045 31 2d???????? 45: . . . SET
0047 30 2b???????? 43: . . . . SEQUENCE
0049 06 03????????? 3: . . . . . OID 2.5.4.10: O
???????????????????? : 55 04 0a
0054 13 24???????? 36: . . . . . PrintableString
???????????????????? 'Universitat Politecnica de Catalunya'
???????????????????? : 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
?????????????????? ??: 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
???????????????????? : 75 6e 79 61
0092 31 2a???????? 42: . . . SET
0094 30 28???????? 40: . . . . SEQUENCE
0096 06 03????????? 3: . . . . . OID 2.5.4.11: OU
???????????????????? : 55 04 0b
0101 13 21??? ?????33: . . . . . PrintableString
???????????????????? 'OU=Dept. Arquitectura de Computadors'
???????????????????? : 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
???????????????????? : 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
?????????????????? ??: 73
0136 30 1e???????? 30: . . SEQUENCE?????? // validity:: SEQUENCE類型(30),長度30
0138 17 0d???????? 13: . . . UTCTime?'960521095826Z' // notBefore:: UTCTime類型(23)
長度13
???????????????????? : 39 36 30 37 32 32 31 37 33 38 30 32 5a
0153 17 0d???????? 13: . . . UTCTime?'979521095826Z' // notBefore:: UTCTime類型(23)
長度13
???????????????????? : 39 37 30 37 32 32 31 37 33 38 30 32 5a
0168 30 81 83???? 112: . . SEQUENCE????????????? // 以下紅色的數據塊表示subject信息
0171 31 0b???????? 11: . . . SET
0173 30 09????????? 9: . . . . SEQUENCE
0175 06 03????????? 3: . . . . . OID 2.5.4.6: C
???????????????????? : 55 04 06
0180 13 02????????? 2: . . . . . PrintableString?'ES'
???????????????????? : 45 53
0184 31 2d???????? 12: . . . SET
0186 30 2b???????? 16: . . . . SEQUENCE
0188 06 03????????? 3: . . . . . OID 2.5.4.10: O
???????????????????? : 55 04 0a
0193 13 24???????? 36: . . . . . PrintableString
???????????????????? 'Universitat Politecnica de Catalunya'
???????????????????? : 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
???????????????????? : 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
???????????????????? : 75 6e 79 61
0231 31 2a???????? 42: . . . SET
0233 30 28???????? 40: . . . . SEQUENCE
0235 06 03????????? 3: . . . . . OID 2.5.4.11: OU
???????????????????? : 55 04 0b
0240 13 21???????? 33: . . . . . PrintableString
???????????????????? 'Dept. Arquitectura de Computadors'
???????????????????? : 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
???????????????????? : 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
????????????????????: 73
0275 31 19???????? 22: . . . SET
0277 30 17???????? 20: . . . . SEQUENCE
0279 06 03????????? 3: . . . . . OID 2.5.4.3: CN
???????????????????? : 55 04 03
0284 13 10???????? 16: . . . . . PrintableString 'Francisco Jordan'
???????? ????????????: 46 72 61 6e 63 69 73 63 6f 20 4a 6f 72 64 61 6e
0302 30 7c????????? 2: . . SEQUENCE?// subjectPublicKeyInfo:: SEQUENCE類型(30),
長度不定
0304 30 0d???????? 13: . . . SEQUENCE
0306 06 09????????? 9: . . . . OID 1.2.840.113549.1.1.1: RSAEncryption //algorithm::
OBJECT IDENTIFIER類型,長度9
???????????????????? : 2a 86 48 86 f7 0d 01 01 01?// 表示RSA算法(見注1)
0317 05 00????????? 0: . . . . NULL
0319 03 6b??????? 107: . . . BIT STRING ?(0 unused bits) // subjectPublicKey::
公鑰值,BIT STRING類型,長度107字節
????????? ???????????: 00?? (0 unused bits)????
0321 03 68??????? 104: . . . . BIT STRING ?(0 unused bits)
0323 02 61???????? 97: . . . . . INTEGER (0 unused bits) // 公鑰值,96字節,768位
???????????????????? : 00 ??(0 unused bits)?
: be aa 8b 77 54 a3 af ca 77 9f 2f b0 cf 43 88 ff
???????????????????? : a6 6d 79 55 5b 61 8c 68 ec 48 1e 8a 86 38 a4 fe
???????????????????? : 19 b8 62 17 1d 9d 0f 47 2c ff 63 8f 29 91 04 d1
???????????????????? : 52 bc 7f 67 b6 b2 8f 74 55 c1 33 21 6c 8f ab 01
???????????????????? : 95 24 c8 b2 73 93 9d 22 61 50 a9 35 fb 9d 57 50
???????????????????? : 32 ef 56 52 50 93 ab b1 88 94 78 56 15 c6 1c 8b
0423 02 03 ?????????3: . . . . . INTEGER?? // RSA加密算法的exponent值
???????????????????? : 01 00 01
0428 a3 81 97???? 151: . . [3]???????? // extensions:: 特殊內容-證書擴展部分(a3),
長度151
0431 30 3c???????? 60: . . . SEQUENCE
0433 30 1f???????? 31: . . . . SEQUENCE??????? // 擴展發行者密鑰標識符
authorityKeyIdentifier
0435 06 03????????? 3: . . . . . OID 2.5.29.35: authorityKeyIdentifier
???????????????????? : 55 1d 23
0440 04 14???????? 22: . . . . . OCTET STRING
???????????????????? : 30 12 80 10 0e 6b 3a bf 04 ea 04 c3 0e 6b 3a bf
???????????????????? : 04 ea 04 c3
0464 30 19???????? 25: . . . . SEQUENCE?????? // 擴展keyUsage
0466 06 03????????? 3: . . . . . OID 2.5.29.15: keyUsage
???????????????????? : 55 1d 0f
0471 01 01????????? 1: . . . . . TRUE
???????????????????? : ff
0474 04 04????????? 4: . . . . . OCTET STRING
???????????????????? : 03 02 07 80
0480 30 19???????? 25: . . . . SEQUENCE?????? //擴展certificatePolicies
0482 06 03????????? 3: . . . . . OID 2.5.29.32: certificatePolicies
???????????????????? : 55 1d 20
0487 04 21???????? 33: . . . . . OCTET STRING
???????????????????? : 30 1f 30 1d 06 04 2a 84 80 00 30 15 30 07 06 05
???????????????????? : 2a 84 80 00 01 30 0a 06 05 2a 84 80 00 02 02 01
???????????????????? : 0a
0522 30 1c???????? 28: . . . . SEQUENCE?????? //擴展subjectAltName
0524 06 03????????? 3: . . . . . OID 2.5.29.17: subjectAltName
???????????????????? : 55 1d 11
0529 04 15???????? 21: . . . . . OCTET STRING
???????????????????? : 30 13 86 11 68 74 74 70 3a 2f 2f 61 63 2e 75 70
???????????????????? : 63 2e 65 73 2f
0552 30 19???????? 25: . . . . SEQUENCE????? //擴展issuerAltName
0554 06 03????????? 3: . . . . . OID 2.5.29.18: issuerAltName
?????????????? ??????: 55 1d 12
0559 04 12???????? 18: . . . . . OCTET STRING
???????????????????? : 30 14 86 12 68 74 74 70 3a 2f 2f 77 77 77 2e 75
???????????????????? : 70 63 2e 65
0579 30 80?????????? : . SEQUENCE (indefinite length) // signatureAlgorithm
不知為何這里的前面算法為空
0581 06 07????????? 7: . . OID
0583 05 00????????? 0: . . NULL
0585 00 00????????? 0: . . end of contents marker
0587 03 81 81????? 47: . BIT STRING????? // 簽名值
???????????????????? : 00????? (0 unused bits)
???????????????????? : 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
???????????????????? : 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
???????????????????? : eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
???????????????????? : a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
???????????????????? : 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
???????????????????? : 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
???????????????????? : eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
???????????????????? : a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
0637 00 00????????? 0: . . end of contents marker
?
注1: OID表示的算法
DSA -- 1.2.840.10040.4.1
sha1DSA -- 1.2.840.10040.4.3
RSA -- 1.2.840.113549.1.1.1
md2RSA -- 1.2.840.113549.1.1.2
md4RSA -- 1.2.840.113549.1.1.3
md5RSA -- 1.2.840.113549.1.1.4
sha1RSA -- 1.2.840.113549.1.1.5
參考:
RFC 2459 Internet X.509 Public Key Infrastructure
X.509證書結構簡介及實例
X.509第三版的證書結構