ANS.1的基础总结

一、ASN.1定义和作用

1.1 定义

ASN.1描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。

1.2 作用

为了解决高级语言中结构化数据在网络传输中的结构关系能送达目的地进行还原,出现了以下几种数据序列化的方法:ASN.1,XML,Json等。

二、ASN.1描述

2.1 数据类型

Integer 、 Bit String 、OCTET String 、Null 、Object Indentifier 、UTF8 String 、Printable String 、UTC time 、Sequence 、 Set 、Choice、ANY等数据类型
除了choice和ANY类型之外的其他数据类型,都有一个标记符。标记符的构成为:
标记符 = 标记符类型 + 标记符ID

2.1.1 标记符类型

类型描述
Universal标准类型
Application应用相关
private定义属于特定组织的类型
Context-Specify上下文的类型,定义特定的结构

2.1.2数据类型对应的标记符ID

数据类型标记符ID描述
Integer0X02全部整数(包含正数和负数)
REAL实数,表示浮点数
ENUMERATED$1标识符的枚举(实力状态机的状态)
Bit String0X03比特串
OCTET String0X04字符串
Null0X05只包含一个值null,用于传送一个报告或者作为choice类型的某些值
Object Indentifier0X06由注册中心赋予的一个实体的标识符
UTF8 String0X12各种字符串还有ISO64String等等。。
Printable String0X13
UTC time0X17日期
Sequence0X30有序集合
Set0X31无序集合

图示:
在这里插入图片描述

2.1.3 编码类型

ASN的编码类型有:BER和DER两种类型
BER:是Basic Encoding Rules 的缩写。它定义了一种或者几种方法,将ASN1语法的数据对象转换成二进制字节码。
DER:是Distinguished Encoding Rules的缩写。是唯一的一种方法,将ASN1语法的数据对象转换成二进制字节码。

2.1.3.1 BER的规则TLV

BER传输语法的格式一直是TLV三元组<Type,Length,Value>,也叫做<Tag,Length,Value>。TLV每个域都是一系列八位组,对于组合结构,其中V还可以是TLV三元组。
Type 表示数据类型
Length 表示数据长度
Value 表示数据
在这里插入图片描述
== 在上图框内的部分,绿色部分为对象类型ID,蓝色部分为值的长度,黄色部分为值。
如果本结构中还有其他的结构类型,则该值仍为一个三元组组成 ==

2.1.4 CHOICE和ANY类型

2.1.4.1 CHOICE

选择类型。包含一个可供选择的数据类型列表。对于类型能够在事先都知道,可用此类型。
Prize::=CHOICE{
car IA5string,
cash INTEGER,
nothing BOOLEAN }

peter Prize::=TRUE 或者
John Prize::= “ Lincoln ” 或者
Sam Prize::= 25000

2.1.4.1 ANY

如果在定义数据时还不能确定数据类型,可以使用ANY型。ANY型可以被任何ASN.1类型置换。
e.g. TextBook::=SEQUENCE {
author IA5string,
reference ANY}

实例:book1 TextBook ::= {
author "shakespeare ",
reference IA5string " ISBN0669123757 "}

book2 TextBook ::= { author "shakespeare ",
reference INTEGER 1988}

三、ASN.1与证书

3.1 ASN.1、X509v3、证书之间的关系

X509v3定义了证书的结构,里面定义了证书含有哪些信息。
ASN.1定义了证书的语法
X509v3遵循ASN.1语法

类比于ASN.1为java的基础语法和语句。 X509v3为User.java的一个用户模板。这个模板要根据java语法去定义。

3.2 证书结构

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 }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值