asn.1学习以及相关资料收集
第一周学习
asn.1学习
asn.1介绍
ASN.1是一种形式化的符号,用于描述通过电信协议传输的数据,无论这些数据的语言实现和物理表示方式如何,无论其应用是复杂还是非常简单。
asn.1是一个标准,用于定义抽象数据类型规范的形式。
提供了一定数量的预定义基本类型,例如:
- 整数(INTEGER)
- 布尔(BOOLEAN)
- 字符串(IA5String,UniversalString ...)
- 位串(BIT STRING)
- 等等
并可以定义构造的类型,例如:
- 结构(SEQUENCE)
- 列表(SEQUENCE OF)
- 在类型之间选择(CHOICE)
- 等等
ASN.1在证书中的应用
X.509标准定义了证书应该包含的内容,ASN.l标准可以用来描述X.509标准。换句话说就是ASN.1类似与伪代码,能够让人们更好地理解和组织X.509标准。
证书中有如下结构
Certificate ::= SEQUENCE
{
tbsCertificate TBSCertificate,
signatureAlgorithm Algorithmidentifier,
signature BIT STRING
}
- tbsCertificate:证书核心,包含了服务器实体和CA机构信息。
- signatureAlgorithm:描述签名算法,用于对tbsCertificate的内容进行签名。
- signature:签名的值。
接下来看TBSCertifcate结构:
TBSCertificate ::= SEQUENCE {
version [0] Version DEFAULT vl,
serialNumber CertificateSerialNumber,
signature Algorithmidentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyinfo SubjectPublicKeyinfo,
issuerUniqueID [1] IMPLICIT Uniqueidentifier OPTIONAL,
-- If present, version MUST be v2 or v3
subjectUniqueID [2] IMPLICIT Uniqueidentifier OPTIONAL,
-- If present, vers工on MUST be v2 or v3
extensions [3] Extensions OPTIONAL
-- If present, version MUST be v3 --
}
- version:version类型是Version,相当于一个枚举类型。值表示的是证书的版本号,目前有v1、v2、v3三个版本,证书叫校验方需要使用对应版本校验。
- serialNumber:每个证书都有唯一的编号,对于不同的CA机构来说,编号是无法预测的,CertificateSerialNumber是一个整型类型。
- signature:描述采用的签名算法。
- issuer:代表 CA 机构的名称,值由国家、组织、子组织名组成。
- validity:描述证书的有效期。
- subject:代表服务器实体的名称,该组织向CA机构申请证书,其对应的Name类型和issuer的Name类型是一样的。
- subjectPublicKeylnfo:包含服务器的公开密码算法和公钥值。
- issuerUniquelD和subjectUniquelD:这两个分别代表CA机构和服务器实体的唯一编号,目前已经被相应的证书扩展替代。
- extension:扩展是X.509 V3版本引入的,主要是为了扩展证书的含义,在不改变X.509版本的情况下,可以相对方便地增加证书新属性,新添加的扩展是否生效取决于证书校验方。
收集后续所用资料
《568262 HTTPS权威指南在服务器和Web应用上部署SSL&TLS和PKI》PDF
《深入浅出HTTPS从原理到实战》PDF+卫东
国际电联电信标准化部门官方网站
ITU标准文档X.680’s documentation
ASN1编码学习
ASN学习