从https://www.rfc-editor.org/rfc/rfc5280:
SubjectAltName ::= GeneralNames
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
GeneralName ::= CHOICE {
otherName [0] AnotherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER }
在实际应用中,我遇到过使用此扩展的 x509 证书。
rfc822Name
并且条目用anddNSName
标记(上下文特定的位集加上类型)0x81
0x82
但directoryName
标记为0xA4
(上下文特定位集加上构造位加上类型=EXPLICIT),其中名称定义为......
Name ::= CHOICE { -- only one possibility for now --
rdnSequence RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
DistinguishedName ::= RDNSequence
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
所以我的问题是 - 如果我正在实现这个 ASN1 结构,我如何知道这些元素中的哪些是 EXPLICIT 以及哪些是 IMPLICIT ?
我的理解是 EXPLICIT 是默认的,并且 RFC 中的规范没有指定任何内容。