一、 (AbstractSyntaxNotationOne)进行描述数据结构,并使用ASN1语法进行编码。ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:1、数据块数据类型标识(一个字节)数据类型包括简单类型和结构类型。简单类型是不能再分解类型,如整型(INTERGER)、比特串(BITSTRING)、字节串(OCTETSTRING)、对象标示符(OBJECTIDENTIFIER)、日期型(UTCTime)等。结构类型是由简单类型和结构类型组合而成的,如顺序类型(SEQUENCE,SEQUENCEOF)、选择类型(CHOICE)、集合类型(SET)等。顺序类型的数据块值由按给定顺序成员成员数据块值按照顺序组成;选择类型的数据块值由多个成员数据数据块类型中选择一个的数据块值;集合数据块类型由成员数据块类型的一个或多个值构成。这个标识字节的结构如下:Bit8-bit7用来标示TAG类型,共有四种,分别是universal(00)、application(01)、context-specific(10)和private(11)。(1位结构类型);0则表明编码类型是简单类型。-bit1是类型的TAG值。根据bit8-bit7的不同值有不同的含义,具体含义见下表。当Bit8-bit7为universal(00)时,bit5-bit1的值表示不同的universal的值:标记(TAG)对应类型备注[UNIVERSAL1]BOOLEAN[有两个值:false或true][UNIVERSAL2]INTEGER[整型值][UNIVERSAL3]BITSTRING[0位或多位][UNIVERSAL4]OCTETSTRING[0字节或多字节][UNIVERSAL5]NULL[UNIVERSAL6]OBJECTIDENTIFIER[相应于一个对象的独特标识数字][UNIVERSAL7]OBJECTDESCRIPTOR [一个对象的简称][UNIVERSAL8]EXTERNAL,INSTANCEOF[][UNIVERSAL9]REAL[实数值][UNIVERSAL10]ENUMERATED[数值列表,这些数据每个都有独特的标识符,][UNIVERSAL12]UTF8String[UNIVERSAL13]RELATIVE-OID[UNIVERSAL16]SEQUENCE,SEQUENCEOF[有序数列,SEQUENCE里面的每个数值都可以是不同类型的,而SEQUENCEOF里是0个或多个类型相同的数据][UNIVERSAL17]SET,SETOF[无序数列,SET里面的每个数值都可以是不同类型的,而SETOF里是0个或多个类型相同的数据][UNIVERSAL18]NumericString[0-9以及空格][UNIVERSAL19]PrintableString[A-Z、a-z、0-9、空格以及符号'()+,-./:=?][UNIVERSAL20]TeletexString,T61String[UNIVERSAL21]VideotexString[UNIVERSAL22]IA5String[UNIVERSAL23]UTCTime[统一全球时间格式][UNIVERSAL24]GeneralizedTime[UNIVERSAL25]GraphicString[UNIVERSAL26]VisibleString,ISO646String[UNIVERSAL27]GeneralString[UNIVERSAL28]UniversalString[UNIVERSAL29]CHARACTERSTRING[UNIVERSAL30]BMPString[UNIVERSAL31]reservedforfutureuse当Bit8-bit7为context-specific(10)时,bit5-bit1的值表示特殊内容:[0]–-表示证书的版本[1]–-issuerUniqueID,表示证书发行者的唯一id[2]–-subjectUniqueID,表示证书主体的唯一id[3]–-表示证书的扩展字段如SEQUENCE类型数据块,其TAG类型位UNIVERSAL(00),属于结构类型(1),TAG值为16(10000)所以其类型标示字段值为(00110000),即为0x30。再如,证书扩展字段类型的数据块,TAG类型为(10),属结构类型(1),TAG的值为3(00011),所以其类型标示字段值为(10100011),即为0xA3。2、数据块长度(1-128个字节)长度字段,有两种编码格式
X509数字证书结构和实例 来自淘豆网m.daumloan.com转载请标明出处.