Konstruierte Typen
Ein konstruierter abstrakter Syntaxnotation One -Typ (ASN.1) besteht aus grundlegenden Typen, Zeichenfolgentypen oder anderen konstruierten Typen. Eine X.509-Zertifikaterweiterung besteht beispielsweise aus drei grundlegenden ASN.1-Typen, wie im folgenden Beispiel gezeigt.
Extension ::= SEQUENCE
{
extnId OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
Eine Erweiterung besteht aus einem Objektbezeichner (OID), einem booleschen Wert, der angibt, ob die Erweiterung kritisch ist, und ein Bytearray, das den Wert enthält. Die Zertifikatregistrierungs-API unterstützt die folgenden erstellten ASN.1-Typen.
SEQUENZ UND SEQUENZ VON
Codierungstag: 0x30
Enthält eine sortierte Reihe von Feldern eines oder mehrerer Typen. Felder können markiert WERDENOPTIONAL oder DEFAULT. Um bei der Decodierung keine Zweideutigkeit zu vermeiden, sollten aufeinander folgende optionale Felder durch Verwendung eines eindeutigen Bezeichners (einer Klammernzahl wie [1]) und von einem folgenden erforderlichen Feld abweichen, wie im folgenden Beispiel gezeigt.
SomeValue ::= SEQUENCE
{
a INTEGER,
b [0] INTEGER OPTIONAL,
c [1] INTEGER DEFAULT 1,
d INTEGER
}
Der Unterschied zwischen SEQUENCE UND SEQUENCE OF besteht darin, dass die Elemente eines SEQUENCE OF-Konstrukts vom gleichen Typ sein müssen. Siehe folgendes Beispiel. Beide Konstrukte weisen beim Codieren denselben Tagwert (0x30) auf.
PolicyQualifiers ::= SEQUENCE OF PolicyQualifierInfo
PolicyQualifierInfo ::= SEQUENCE
{
policyQualifierId OBJECT IDENTIFIER,
qualifier ANY OPTIONAL
}
Eine weitere Möglichkeit zum Betrachten des Unterschieds zwischen SEQUENZ UND SEQUENZ OF besteht darin, sie mit ihren Gegenstücken in der C-Programmiersprache zu vergleichen. Das heißt, SEQUENCE entspricht ungefähr einer Struktur und SEQUENZ OF entspricht ungefähr einem Array.
SET UND SET OF
Codierungstag: 0x31
Enthält eine nicht angeordnete Reihe von Feldern eines oder mehrerer Typen. Dies unterscheidet sich von einer SEQUENZ , die eine sortierte Liste enthält. Wenn Sie eine nicht sortierte Liste angeben, kann eine Anwendung die Strukturfelder dem Encoder in der am besten geeigneten Reihenfolge bereitstellen. Wie bei SEQUENCE können die Felder eines SET-Konstrukts mit OPTIONAL oder DEFAULT gekennzeichnet werden, und eindeutige Bezeichner müssen verwendet werden, um den Decodierungsprozess zu disambiguieren. Der Unterschied zwischen SET UND SET OF besteht darin, dass die Elemente eines SET OF-Konstrukts vom gleichen Typ sein müssen.
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET OF AttributeTypeValue
AttributeTypeValue ::= SEQUENCE
{
type OBJECT IDENTIFIER,
value ANY
}
WAHL
Codierungstag: nicht zutreffend
Definiert eine Auswahl zwischen Alternativen. Jede Alternative muss durch eine klammerte ganze Zahl eindeutig identifiziert werden, um bei der Decodierung die Mehrdeutigkeit zu vermeiden. Bei der Codierung verfügt das CHOICE-Konstrukt über den Codierungstagwert der ausgewählten Alternative.
AltNames ::= SEQUENCE OF GeneralName
GeneralNames ::= AltNames
GeneralName ::= CHOICE
{
otherName [0] IMPLICIT OtherName,
rfc822Name [1] IMPLICIT IA5String,
dNSName [2] IMPLICIT IA5String,
x400Address [3] IMPLICIT SeqOfAny,
directoryName [4] EXPLICIT Name,
ediPartyName [5] IMPLICIT SEQUENCE OF ANY,
uniformResourceLocator [6] IMPLICIT IA5String,
iPAddress [7] IMPLICIT OCTET STRING,
registeredID [8] IMPLICIT OBJECT IDENTIFIER
}
Zugehörige Themen