Tipos básicos

La API de inscripción de certificados admite los siguientes tipos básicos de ASN.1.

CADENA DE BITS

Etiqueta de codificación: 0x03

Certreq.exe nombre: BIT_STRING

Una cadena binaria o bit es una matriz arbitrariamente larga de bits. Los bits específicos se pueden identificar mediante enteros entre paréntesis y nombres asignados como en el ejemplo siguiente.

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

Las claves de certificado y las firmas a menudo se representan como cadenas de bits.

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

BOOLEANO

Etiqueta de codificación: 0x01

Certreq.exe nombre: BOOLEAN

Un tipo booleano puede contener uno de dos valores, TRUE o FALSE. En el ejemplo siguiente se muestra la estructura ASN.1 para una extensión de certificado restricciones básicas. El campo cA especifica si un sujeto de certificado es una entidad de certificación (CA). La importancia predeterminada es FALSE.

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

ENTERO

Etiqueta de codificación: 0x02

Certreq.exe nombre: INTEGER

Un entero normalmente puede ser cualquier valor entero positivo o negativo. En el ejemplo siguiente se muestra la estructura ASN.1 para una clave pública RSA. Tenga en cuenta que el campo publicExponent está restringido a un entero positivo inferior a 4.294.967.296.

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

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

NULO

Etiqueta de codificación: 0x05

nombre de Certreq.exe: NULL

Un tipo de NULL contiene un solo 0x00 de bytes. Se puede usar en cualquier lugar en el que la solicitud de certificado debe indicar un valor vacío. Por ejemplo, un AlgorithmIdentifier es una secuencia que contiene un identificador de objeto (OID) y parámetros opcionales.

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

Si no hay parámetros cuando se codifica la estructura, se usa NULL para indicar un valor vacío.

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)

IDENTIFICADOR DE OBJETO

Etiqueta de codificación: 0x06

nombre de Certreq.exe: OBJECT_ID

La API de inscripción de certificados usa identificadores de objeto (OID) como un tipo de puntero universal a identificadores de algoritmo, atributos y otros elementos PKI. Normalmente, los identificadores de identificación se presentan en una cadena decimal punteada como "2.16.840.1.101.3.4.1.42". Los elementos individuales de la cadena, separados por puntos, representan los arcos y las hojas en un árbol de la entidad de registro que identifica de forma única el objeto y la organización que lo registró. Por ejemplo, el OID anterior se puede expandir a un país conjunto iso-itu-t(2) country(16) us(840) organization(1) gov(1) gov(101) csor(3) nistAlgorithms(4) aesAlgs(1) con .42 anexado para identificar de forma única el algoritmo de encadenamiento de bloques de cifrado AES (CBC) de 256 bits.

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

OCTET STRING

Etiqueta de codificación: 0x04

Certreq.exe nombre: OCTET_STRING

Una cadena de octeto es una matriz de bytes arbitrariamente grande. A diferencia de tipo BIT STRING, sin embargo, no se pueden asignar nombres a bits y bytes específicos de la cadena. La palabra octeto está pensada para ser una forma independiente de la plataforma para hacer referencia a una palabra de memoria. Dentro del contexto de la API de inscripción de certificados, el octeto y el byte son intercambiables.

---------------------------------------------------------------------
-- 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
}

sistema de tipos ASN.1

reglas de codificación distintivos

codificación DER de tipos ASN.1