基本类型

证书注册 API 支持以下基本 ASN.1 类型。

BIT STRING

编码标记:0x03

Certreq.exe名称:BIT_STRING

位或二进制字符串是任意长度的位数组。 特定位可以通过带圆括号的整数和分配的名称进行标识,如以下示例所示。

Versions ::= BIT STRING{ version-1(0), version-2(1) } 

证书密钥和签名通常表示为位字符串。

---------------------------------------------------------------------
-- ASN.1 type example: BIT STRING
-- Tag number: 0x03
---------------------------------------------------------------------
SubjectPublicKeyInfo ::= SEQUENCE 
{
  algorithm           AlgorithmIdentifier,
  subjectPublicKey    BIT STRING
} 

BOOLEAN

编码标记:0x01

Certreq.exe名称:BOOLEAN

布尔类型可以包含两个值之一: TRUEFALSE。 以下示例演示基本约束证书扩展的 ASN.1 结构。 cA 字段指定证书使用者是否是 CA) (证书颁发机构。 默认严重性为 FALSE

---------------------------------------------------------------------
-- ASN.1 type example: BOOLEAN
-- Tag number: 0x01
---------------------------------------------------------------------
BasicConstraints ::= SEQUENCE 
{
  cA                  BOOLEAN DEFAULT FALSE,
  pathLenConstraint   INTEGER OPTIONAL
}

INTEGER

编码标记:0x02

Certreq.exe名称:INTEGER

整数通常可以是任何正整数值或负整数值。 以下示例演示 RSA 公钥的 ASN.1 结构。 请注意, publicExponent 字段限制为小于 4,294,967,296 的正整数。

---------------------------------------------------------------------
-- ASN.1 type example: INTEGER
-- Tag number: 0x02
---------------------------------------------------------------------
HUGEINTEGER ::= INTEGER

RSAPublicKey ::= SEQUENCE 
{ 
  modulus         HUGEINTEGER,    
  publicExponent  INTEGER (0..4294967295) 
} 

Null

编码标记:0x05

Certreq.exe名称: NULL

NULL 类型包含单个字节0x00。 它可用于证书请求必须指示空值的任何位置。 例如, AlgorithmIdentifier 是一个序列,其中包含对象标识符 (OID) 和可选参数。

---------------------------------------------------------------------
-- ASN.1 type example: NULL
-- Tag number: 0x05
---------------------------------------------------------------------
AlgorithmIdentifier ::= SEQUENCE 
{
  algorithm           OBJECT IDENTIFIER,
  parameters          ANY OPTIONAL    
}

如果在对结构进行编码时没有参数,则使用 NULL 来指示空值。

30 0d            ; SEQUENCE (d Bytes)
|  |  |  06 09          ; OBJECT_ID (9 Bytes)
|  |  |  |  2a 86 48 86 f7 0d 01 01  01
|  |  |  |     ; 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
|  |  |  05 00          ; NULL (0 Bytes)

对象标识符

编码标记:0x06

Certreq.exe名称:OBJECT_ID

证书注册 API 使用对象标识符 (OID) 作为一种指向算法标识符、属性和其他 PKI 元素的通用指针。 OID 通常以点状十进制字符串表示,例如“2.16.840.1.101.3.4.1.42”。 字符串中的单个元素(用句点分隔)表示注册机构树中的弧形和叶,该树唯一标识对象和注册它的组织。 例如,前面的 OID 可以扩展到 joint-iso-itu-t (2) 国家/地区 (16,) 我们 (840) 组织 (1) gov (101) csor (3) nistAlgorithms (4) aesAlgs (1) 追加了 0.42,用于唯一标识 256 位 AES 密码块链 (CBC) 模式算法。

---------------------------------------------------------------------
-- ASN.1 type example: OBJECT IDENTIFIER
-- Tag number: 0x06
---------------------------------------------------------------------
AlgorithmIdentifier ::= SEQUENCE 
{
  algorithm           OBJECT IDENTIFIER,
  parameters          ANY OPTIONAL    
}

八进制字符串

编码标记:0x04

Certreq.exe名称:OCTET_STRING

八进制字符串是任意大的字节数组。 但是,与 BIT STRING 类型不同,无法为字符串中的特定位和字节分配名称。 八位字节一词是一种独立于平台的方式来引用内存词。 在证书注册 API 的上下文中,八位字节和字节可互换。

---------------------------------------------------------------------
-- ASN.1 type example: OCTET STRING
-- Tag number: 0x04
---------------------------------------------------------------------
AuthorityKeyId ::= SEQUENCE 
{
  keyIdentifier       [0] IMPLICIT OCTET STRING OPTIONAL,
  certIssuer          [1] EXPLICIT NAME
  certSerialNumber    [2] IMPLICIT INTEGER OPTIONAL
}

ASN.1 类型系统

可辨别编码规则

ASN.1 类型的 DER 编码